つらつら Excel VBA

私の備忘録です。

Excel

オートシェイプの文字をグラデーション

何回か虹グラデーションを作って分かったけど、緑色をそのままrgbGreenで虹を作るとなんか美しくない。固定観念に囚われず好きな色で作るべし。ちなみに虹が7色なのは日本と数国だけ、8色の国や2~6色の国もある。文字のグラデーションをする際に0~1の範囲…

四角形グラデーションテスト

テスト結果 以下テストコード Sub 四角形グラデーションテスト() Dim r As Range Set r = ThisWorkbook.Worksheets("Sheet1").Range("A2") Do While r.Value <> "" With r.Interior .Pattern = xlPatternRectangularGradient '四角形 With .Gradient 'グラデ…

背景色の線グラデーションテスト

きれいなグラデーションを作るにはセンスが必要!私には無理。テスト結果 以下、テストコード Sub 線グラデーションテスト() With ActiveSheet.Range("A1").Interior .Pattern = xlPatternLinearGradient .Gradient.Degree = 0 With .Gradient.ColorStops .C…

背景色の線グラデーション

背景色を装飾する。グラデーションだけど、ぼかしは極力抑えました。グラデーションとは...? Sub 線グラデーションテスト() Call FillStripeColor(range("A1"), rgbWhite, rgbBlue, 45, 2) Call FillStripeColor(range("B1"), rgbWhite, rgbGreen, 135, 2) …

ArrayList

Callの有無が混在してますが書き方の一例なので見逃して下さい。 '.NET Framework 3.5 (.NET 2.0および3.0を含む) がインストールされている必要がある。 '「Windowsの機能の有効化または無効化」で設定変更の必要がある。 Sub TestArrayList() Dim arrayLis…

配列の初期値入れ込み

配列リテラルの場合は番号が1からになる模様。ふしぎ! 2次元配列と配列の入れ子(ジャグ配列)は書き方が違うので注意。 Option Base 0 Sub 配列テスト() Dim myArray, ar, a Dim i As Integer, j As Integer '1次元配列 ReDim myArray(3) myArray(0) = "お…

多次元配列の完全一致検索

For Each便利。 Sub テスト() '適当に8次元配列を用意 Dim myArray(9, 9, 9, 9, 9, 9, 9, 9) As Variant '適当なテストデータ myArray(1, 1, 8, 7, 5, 8, 8, 8) = "test1" myArray(8, 8, 8, 1, 1, 8, 7, 5) = "test" myArray(5, 8, 8, 8, 1, 1, 8, 7) = "tes…

Filterで配列を部分一致絞り込み

一次元配列限定だけど、配列を絞れる! myArray = Filter(myArray, "文字", False) 'True:文字を含む、False:文字を含まない こんな感じ。 Sub 配列を絞りたい() Dim myArray myArray = Array("北海道", "~略~", "沖縄県") myArray = Filter(myArray, "県"…

TEXTJOIN関数

できるだけ楽に県名の配列を用意したい。 ネットで県のリストを探してExcelのA1にコピペ、TEXTJOIN関数で繋げる。 =TEXTJOIN(""",""",TRUE,A1:A47) 'TEXTJOIN関数の結果 北海道","青森県","岩手県","宮城県","秋田県","山形県","福島県","茨城県","栃木県","…

ドルマーク付きの関数と変数の型

ドルマーク付きの関数は文字列型で返す関数。付いてない関数はVariant型で返す関数。ドルマーク付き関数を使うとNull判定が必要になる。絶対嫌だ。 文字列型の変数宣言時にもドルマークが使える。 Dim a$ Debug.Print TypeName(a) ’Stringが返る a = " test …

固定長文字列変数の宣言

String宣言の後にアスタリスク(*)と定数を指定することで、文字数固定の変数を宣言することができる! Sub 固定長文字列() Dim s As String * 10 s = "テスト文字列" Debug.Print Len(s) Debug.Print "s=[" & s & "]" Debug.Print Asc(Right(s, 1)) End Sub …

ChromeDriverの手動更新

手動更新です。今後の為には自動更新の方が良い。間違いない。 ドライバーが古いぞ!というエラー。 本家ChromeDriverのサイト。新しいドライバーを探します。 sites.google.com Windowsなら赤丸選択ダウンロード。 SeleniumBasicインストールフォルダ内のch…

時間はhh:mm:ssの形で入力する

mm:ssのつもりでExcelシートに入力してもhh:mmになる。見た目に騙されない。Excelが認識するように入力するのだ。 時間と思われるデータの頭に「00:」を追加してhh:mm:ssの形にした。 Sub 分秒を時分秒にする案() 'Excelシートに書き込む前のデータを想定。 …

文字コードの取得

分からない文字に遭遇したら、文字コードを調べてググる。Shift-JISとASCIIコードは互換性がある! Sub 文字コード確認用() Dim i As Long Dim s As String Dim sCode As String With Selection For i = 1 To Len(.Value) s = Mid(.Value, i, 1) 'Shift-JIS …

小計と合計(SUBTOTAL関数)

SUBTOTAL関数を除けて合計を出してくれる!小計とか出しやすい!SUBTOTAL(パラメータ,参照範囲) パラメータは1~11、101~111が入る。9か109が合計。違いは調べてません。 平均、最大、最小、カウント、いろいろできるらしい。以上。

囲まれた文字を抽出

ランダムファイル名(FSO)

'ランダムファイル名を生成(FSO) Function getRndFileName() As String 'Dim FSO As Object 'Set FSO = CreateObject("Scripting.FileSystemObject") Dim FSO As FileSystemObject Set FSO = New FileSystemObject getRndFileName = FSO.GetTempName 'getR…

オートシェイプを画像として保存

'オートシェイプを画像として保存 Sub saveShapeImage(myShape As Shape, outputPath As String) 'シート内にチャートオブジェクトを作成 Dim myChart As ChartObject Set myChart = ActiveSheet.ChartObjects.Add( _ Left:=0, _ Top:=0, _ Width:=myShape.W…

図の背景を透過にする

Sub 選択図を透過にするテスト() 'オブジェクトが選択されているか If VarType(Selection) <> vbObject Then Exit Sub Dim myShape As ShapeRange Set myShape = Selection.ShapeRange With myShape.PictureFormat .TransparentBackground = msoTrue .Transp…

QRコード(Access)

Google先生のAPIは永遠に使える訳ではないので回避策としてテスト。Accessランタイム インストールバーコードはAccessのコントロールなのでAccessが必要!無ければランタイムでよい!Accessランタイムは無料!さすMicrosoft 早速ダウンロードしてインストー…

QRコード(Google先生)

Google Chart API。パラメータ詳細は調べてません。URLエンコードすれば多分漢字が使える! ブラウザなどで以下のURLにアクセスするとQRコード画像が返される。さすGoogle先生 myURL = "https://chart.apis.google.com/chart?cht=qr&chs=100x100&chl=TEST" '…

セル結合の確認

If Range("A1").MergeCells Then Debug.Print "結合されています" End If With Range("A2") Debug.Print .MergeArea.Address '結合範囲 Debug.Print .MergeArea.Count 'セル数 Debug.Print .MergeArea.Rows.Count '行数 Debug.Print .MergeArea.Columns.Coun…

セル結合

Range("E1:G1000").Merge Range("E1").UnMerge 以下、テスト用コード '確認メッセージ非表示 Application.DisplayAlerts = False Dim iRow As Long Dim sh As Worksheet Set sh = ThisWorkbook.Worksheets("Sheet1") 'セル結合1 For iRow = 1 To 1000 sh.Cel…

セルの幅と高さサイズ指定

Sub セルの幅と高さサイズ指定() With ActiveSheet '自動調整確認用テスト文字 '.Range("A1:G10").Value = "aaaaaaaa" 'サイズ一括指定 .Cells.RowHeight = 30 .Cells.ColumnWidth = 5 '基準値に戻す .Rows("2").UseStandardHeight = True .Columns("A").Use…

複数のテキストファイルを読み込む処理

'参照設定 Microsoft Scripting Runtime Sub 複数のテキストファイルを1行ずつ読み込む処理FSO() Dim tempFolder As String tempFolder = ThisWorkbook.Path & "\temp\" Dim f As File Dim ts As TextStream Dim fso As FileSystemObject Set fso = New File…

色からRGB値を算出

Sub セルの背景色をRGBで取得() 'セルの背景色を取得 Dim iColor As Long iColor = ActiveCell.Interior.Color '算出 Dim iR As Long, iG As Long, iB As Long iR = iColor Mod 256 iG = Int(iColor / 256) Mod 256 iB = Int(iColor / 256 / 256) Debug.Prin…

1,600万色を56色に減色する

とりあえずセルの背景色を減色した。深く考えない! Sub カラーインデックス56色に書き換え() Dim r As Range For Each r In ThisWorkbook.ActiveSheet.UsedRange With r.Interior If .ColorIndex <> xlNone Then .ColorIndex = .ColorIndex End If End With…

VBAでGetPixel

ディスプレイ上のどこでも色情報を取得できるAPIのGetPixel。100x100ピクセルくらいの範囲でも激重なので注意! 読み取り範囲と基準座標はポイントとピクセルとインチとdpiの計算が必要でハードルが高いと思います。 色情報を取得できたら、シートのセルの背…

ディスプレイ上の画像位置を取得する(DPI値の注意)

ピクセル=ポイント×96/72 インチ変換計算が必要で72で割ってます。問題は96の部分。 'ディスプレイ上におけるA1の左上の位置を取得する。ピクセル値。 x = ActiveWindow.PointsToScreenPixelsX(0) y = ActiveWindow.PointsToScreenPixelsY(0) 'A1の左上か…

画像ファイルをシートに表示

Sub 画像ファイル読み込みテスト() Dim myFileName As Variant Dim myShape As Shape 'ファイル選択ダイアログ myFileName = Application.GetOpenFilename 'キャンセルやサイズ0の場合は処理終了 If myFileName = False Then Exit Sub If FileLen(myFileName…