つらつら Excel VBA

私の備忘録です。

曜日

日曜日~土曜日。1~7の数値に対応。セルに以下の式を入力。曜日や数値が出せる。 =TEXT(NOW(),"(aaa)") '(日)~(土) =TEXT(NOW(),"aaaa") '日曜日~土曜日 =WEEKDAY(NOW()) '1~7 セルの書式設定のユーザー定義でも出せる。aaa、(aaa)、ddddなどを設定。 VB…

CallByName

メゾッドやプロパティをテキストで指定して実行や取得ができる。 用途が思いつかない・・・ CallByName(object,procname,calltype,[args()]) calltype 値定数 1vbMethod 2vbGet 4vbLet 8vbSet 使用例 total = WorksheetFunction.Sum(Range("A1:B5")) total =…

CellsとRange

範囲を指定するならRangeを使う。Cellsは範囲指定ができない。 変数を使って動的な処理を行うならCellsを使う。固定セルならRangeを使う。 人に見せるなら上記を守る。 CellsとRangeを使い分ける。(私は出来てない) よくあるパターンから。 Dim r As Range…

While~Wend文ってなんぞ

VBA

Do While~Loopと全く一緒。 互換性のために残っている模様。Doを使いましょう。 Sub test1() Dim i As Long i = 0 While i < 10 i = i + 1 Wend Debug.Print i '10 i = 0 Do While i < 10 i = i + 1 Loop Debug.Print i '10 i = 0 Do Until i >= 10 i = i +…

CSSでソースコードを折り返し表示しない

プログラムは折り返しが多いと見づらい。パソコン表示だと気にならないが、スマホ表示だととても気になる。 pre.code{ font-size: 80%; max-height: 200px; background:#f7f7f7; white-space: pre; overflow: auto; } pre.code{ font-size: 80%; max-height:…

簡潔に書こうとして失敗した

こんなの書いた。範囲拡大するだけ。 Sub test1() Dim rng As Range Set rng = Range("A1") With rng Set rng = .Resize(, 2) '列数拡大(1→2) Set rng = .Resize(3) '行数拡大(1→3) End With Debug.Print rng.Address End Sub .Resize(, 2)で列数が2に変わっ…

範囲を広げる(Offset、Resize)

上下左右1セルずつ選択範囲を広げたい。 1セル選択→9セル選択、4セル選択→16(18)セル選択みたいな感じのことをしたい。起点が1列目1行目の場合にOffsetでエラーが起きる。 これを無視すると簡単。 Sub 選択範囲を広げる1() On Error Resume Next Dim targetR…

罫線を引く、消す、有無を比較

罫線について使うプログラムと定数をまとめた。 '選択範囲に格子の線を引く Selection.Borders.LineStyle = xlContinuous ’実線 Selection.Borders.LineStyle = True '同じ結果 ' 選択範囲に中太、青色、格子線 ' 線の指定をせずとも罫線が出る不思議。 With…

プロシージャが大きすぎます

プログラムが大きいとエラー。64Kを超えるとダメとのこと。 8,000行くらい書いて実行したら上記のエラーが出ました。 Sub test() Dim iYear As Integer, iMonth As Integer, iDay As Integer Dim sMsg As String 'テストデータ iYear = 2023 iMonth = 2 iDay…

CSSで行間調整

<p class="div-sample" style="line-height: 100%;"> .div-sample { width: 270px; margin-right: auto; background-color: #FFFFCC; } line-height 行間調整用プロパティ。文字サイズ+行間の数値を指定する。 推奨値1.5以上。1.5と150%は同じ指定。px、emでも指定可能。 指定サイズ-文字サイズで余った分が上</p>…

CSSでテーブルストライプ模様

はてなブログ内のテーブルをしましま模様にしたい。 WindowsとAndroidのGoogleChromeでは出来た!他は知らん(R4/4/27) .sample001 { border-collapse: collapse; } .sample001 th, .sample001 td { border: 1px solid #000000; } .sample001 tr:nth-child(…

CSSよく分からん

困っているわけではないのです。 こんなテーブルを用意。 タイトル1 タイトル2 タイトル3 a b c d e f g h i j k l m n o p q r s t u v w x y z 自分のはてぶ環境はWindows10のGoogleChrome。 tableを行単位で塗り潰したい。とりま交互に塗り潰してみた。 <tr style="background-color:#66CCFF;"></tr>…

シートの表からHTMLテーブルを作成

tdとかtrを書くの面倒なので作った。 以下を実行するとエクセルシートの選択範囲をテーブル用HTMLに書き換える。直接セルを書き換えてしまうので注意。 ファイル保存してから実行、もしくは実行後に下の削除用を実行。 ' tableタグくらいは自分で書く。 Sub …

演算誤差

VBAに限らずコンピュータであれば演算誤差は起こる。 演算誤差の有無は、仕様を決めた人と数式とかプログラム書く人に委ねられる。 最近は誤差のこと忘れてた(笑)同じ動作のプログラムを2つ用意。違うのは変数だけ。 Sub 演算誤差の確認() Dim d As Double…

RGB値から色名を知りたい

VBA

インターネットで定数一覧を探してエクセルシート上で作った脳筋コード。 定数値以外の色名は知らん。 '定数名を返す力技。 Function ColorName(iColor) As String Dim returnStr As String Select Case iColor Case 0: returnStr = "rgbBlack" Case 1002588…

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

何回か虹グラデーションを作って分かったけど、緑色をそのまま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が合計。違いは調べてません。 平均、最大、最小、カウント、いろいろできるらしい。以上。