2013年12月26日

Java(Android)の日付/時刻フォーマット変換関数

 いっつも日付や時刻のフォーマット変換の関数を新しく考えてしまうので、忘れないようにメモ

変換関数

/**
 * 日付/時刻フォーマット変換(String型の日付/時刻を任意の日付/時刻に変換する)
 * @param dateValue 日付/時刻文字列
 * @param fromFormat 変換元の日付/時刻フォーマット(ex.yyyyMMdd)
 * @param toFormat 変換先の日付/時刻フォーマット(ex.yyyy/MM/dd)
 * @return フォーマットして日付(エラー発生の場合、フォーマット変換しない)
 */
public static String changeFormat(String dateValue, String fromFormat, String toFormat) {

try {
SimpleDateFormat sdf = new SimpleDateFormat(fromFormat);
Date d = sdf.parse(dateValue);
sdf = new SimpleDateFormat(toFormat);
return sdf.format(d);
} catch (ParseException e) {
return dateValue;
}

}

使い方

日付のフォーマット変換
String s = changeFormat("20131226", "yyyyMMdd", "yyyy/MM/dd");
>2013/12/26

時刻のフォーマット変換
String s = changeFormat("213440", "HHmmss", "HH:mm:ss");
>21:34:40


2013年12月24日

AdmobをAndroidのActivityに表示するメモ

 いつも、Admobの広告を設定する箇所を忘れてしまうのでそのメモ

プロジェクトに追加するライブラリを追加する

libs
 GoogleAdMobAdsSdk-6.4.1.jar

Admobの広告を表示するLayoutファイルに赤字のところを追加する

admob_publisheridは、Admobで発行されたpubliserIDをリソースに設定しておく。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
    </LinearLayout>
    <com.google.ads.AdView 
   android:id="@+id/main_admob"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
ads:adUnitId="@string/admob_publisherid"
ads:adSize="BANNER"
ads:loadAdOnCreate="true"/>
 
</LinearLayout>

AndroidManifest.xmlにactivityを追加する

<activity android:name="com.google.ads.AdActivity"  android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

Activityクラスに広告をロードする

    try {
        AdView adView  = (AdView)findViewById(R.id.main_admob);
        adView.loadAd(new AdRequest());
    } catch(Exception e) {
        e.printStackTrace();
    }


2013年12月19日

Access97でモジュールを変更すると落ちる

 Access97(無印)でアプリケーションを作成して完成後にモジュールをちょっといじるとAccess自体が異常終了することがあります。
 (モジュールをコンパイルしても異常終了する場合があります)
 原因は完全に不明です。

 OSの再起動等いろいろしてみても絶対に改善しません。
Access自体のバグというのは間違いないと思うのですが、Access97自体もう既にサポート切れなのでマイクロソフトも何もしてくれません。
 本来は、Access97は使用せずにバージョンアップすれば良いのですが、ユーザの都合でそうも行きません。

で、復旧させる方法を考えましたので一応記録しておきます。


  1. モジュール以外のオブジェクトを新しいmdbファイルにエクスポートする。
    (モジュールは新しく作るため、モジュールはそのまま)
  2. 1.で作成したmdbをAccessで開き、新しいモジュールを作成します。
  3. 2.で作成したモジュールに、1.のモジュールのソースの内容をコピー&ペーストします。
    (モジュールの数分繰り返します。)
  4. モジュールをコンパイルします。


 もし、困っている方は試してみてください。

EXCELのシートを目次化する

 EXCELを使ってドキュメントを作るのは悪いと思いません。
ですが、あまりにも読む人の為に工作がなくて困ってしまいます。


 いろいろな資料をシートでわけるのはいいのですが、どこになんのシートがあるかわからなくても待ってしまいます。
 全シートへのリンクを付けた目次をワンタッチで作成できるマクロを書きました。
使ってみてください。


Private Const 目次タイトル As String = "目次"
Private Const 目次列 As Long = 2

Public Sub 目次作成()

    Dim mokuji As Worksheet
    Dim sh As Worksheet
    Dim row As Long
    Dim i As Long
    
    ' 目次ワークシートの準備
    Set mokuji = Worksheets.Add(before:=Worksheets(1))
    row = 1
    mokuji.Name = 目次タイトル
    mokuji.Cells(row, 目次列).Value = 目次タイトル
    
    ' 各シート名を目次にする
    For i = 2 To ActiveWorkbook.Sheets.Count
        row = row + 1
        Set sh = ActiveWorkbook.Sheets(i)
        With mokuji
            .Cells(row, 目次列).Value = sh.Name
            .Hyperlinks.Add anchor:=.Cells(row, 目次列), Address:="#'" & sh.Name & "'!A1" ' リンク先のシートの先頭に位置づけ
        End With
    Next

End Sub


2013年12月3日

Accessの追加クエリーで連番を振る

 Accessの追加クエリーで連番を振る方法を説明します。
この機能を使うことで、VBAでゴリゴリとコーディングする必要なく数行のコーディングで簡単にレコードをコピーしながら連番を振ることができるようになります。

要件

入力テーブルから出力テーブルへレコードこコピーする時に、出力テーブルの項目に連番を振りたい。

作るもの

  1. 連番を発行する関数
  2. レコードコピーする追加クエリ
  3. 追加クエリを実行する

連番を発行する関数

標準モジュールに関数を準備します

Dim newNum As Long

' 連番を初期化する
' GetNewNumを実行する前に呼び出す。
Public Sub InitNum()

    newNum = 0

End Sub

' クエリ内で呼び出す関数。
Public Function GetNewNum(v As Variant) As Long

    newNum = newNum + 1
    GetNewNum = newNum

End Function

レコードをコピーする追加クエリ


連番を振りたいフィールドに「連番:GetNerNum([フィールド1])」のように記載します。
このフィールド1は、入力テーブル内にフィールド名を指定します。(値がnullにならない項目を指定します。)

追加クエリを実行する

 クエリを実行する前に「InitNum」を呼び出して連番の初期値を設定します。
(これを実行しないと何が)

Private Sub 実行_Click()

    Dim qDef As QueryDef
    
    Call InitNum  ' 連番を初期化する
    Set qDef = CurrentDb.QueryDefs("QIテーブルコピー")
    qDef.Execute
    qDef.Close

End Sub