つらつら Excel VBA

私の備忘録です。

ユーザー定義書式

無理矢理文字を表示させたい時

 

ユーザー定義書式に「@"文字"」と入力

セルに「なんたら」と入力

「なんたら文字」と表示される

この場合、セル未入力だと何も表示されない

 

 

完全に非表示にしたい場合

 

ユーザー定義書式にセミコロンを3個入力「;;;」

何を入力しても非表示になる!

実際には入力されてるので計算とか問題無し

 

上記捕捉

プラスの数値;マイナスの数値;0;文字

 

ランダム値を重複なしで取得

Dim DIC As Object, mKey

Dim i As Integer, rd As Integer, no As Integer
Set DIC = CreateObject("Scripting.Dictionary")
For i = 1 To 52 '連想配列の作成。
    DIC.Add i, i
Next

For i = 52 To 1 Step -1
    rd = getRandom(1, i) '1~iの範囲でランダム値を得る自作関数。これは自分で作る!
    mKey = DIC.keys
    no = mKey(rd - 1) 'ここで得た数値を使用する。

    'Debug.Print "i=" & i & ",rd=" & rd & ",no=" & no
    DIC.Remove no '使用した数値を削除。

Next

※使用例としてはトランプ。もっと良い方法があると思います。

オートフィルタ

'オートフィルタで絞り込み、必要列だけデータを取得する。
searchData = "*条件を含む*"
wsh.AutoFilterMode = False 'オートフィルタ解除
wsh.Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:=searchData
Set targetRange = wsh.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)

For Each c In targetRange
    '1行目以外かつ5列目(タイトル行以外の指定データ列)
    If c.Row > 1 And c.Column = 5 Then
        getData = c.Value
    End If
Next c

Set targetRange = Nothing

Select Case文の使い方メモ

Select Case文は上から順に条件を確認し、一致したところで終わる。

基本編

Select Case aaa
Case "A"
Case "B"
Case Else
End Select

応用編

Select Case True
Case aaa Like "*A*"
Case aaa Like "*B"
Case Else
End Select

シートコピー失敗

wsh.Copy After:=ThisWorkbook.Worksheets(1)

Excel2007以降の環境で上記のコードをExcel2003(*.xls)ファイルで実行すると失敗する。

 

原因

扱うことのできるExcelシートの行数、列が異なるため。

行・列数をExcelのバージョン毎に覚えるのは嫌なので、どうしても知りたいときは知りたいバージョンのExcelで縦横にスクロールしる。

 

対策方法

Excel2007以降のファイル形式で保存しなおし、ファイルを開きなおす

※保存直後に実行しても失敗します。