読者です 読者をやめる 読者になる 読者になる

つらつら Excel VBA

私の備忘録です。

Excel ユーザー定義書式

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

 

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

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

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

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

 

 

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

 

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

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

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

 

上記捕捉

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

 

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

 

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

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

ExcelVBA フォームに画像ファイル表示

Dim gazou As String
gazou = ThisWorkbook.Path & "\gif\gazou.gif"
Image1.Picture = LoadPicture(gazou)

Excel VBA オートフィルタ

'オートフィルタで絞り込み、必要列だけデータを取得する。

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

Excel VBA Select文の使い方メモ

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

 

基本編

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

Excel VBA シートコピー失敗

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

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

 

原因

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

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

 

対策方法

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

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

Excel VBA ブックのパスワード解除

On Error Resume Next


SendKeys "{ESC}"
Dim wb As Workbook
Set wb = Workbooks.Open(fileName:=target_path, Password:="Password")

If ActiveWorkbook.Name = FileName Then
    Debug.Print "開きました。"
End If

 

On Error GoTo 0
Set wb = Nothing