「Office」の版間の差分
細 (→デスクトップ通知) |
(Other 継続行) |
||
| (同じ利用者による、間の45版が非表示) | |||
| 129行目: | 129行目: | ||
== Excel == | == Excel == | ||
=== Other === | |||
===== 変更履歴 ===== | |||
https://chatgpt.com/share/68661e71-5470-800b-85fe-38bcad8be136 | |||
Excelは変更履歴あまりできない。昔のxlsだとあったが、xlsxでなくなった。基本はWordで変更履歴は取り扱える。 | |||
Excelでやる場合、コメントになる。次のコメント・前のコメントがあるので、これで変更箇所の情報を残せる。 | |||
=== オートシェイプの全選択 === | === オートシェイプの全選択 === | ||
| 207行目: | 216行目: | ||
=== Cell === | === Cell === | ||
==== シート名参照 ==== | |||
[https://www.excel-no-mori-blog.jp/?p=34514 【エクセル】シート名を関数で表示する方法。表の題名をシート名から自動で取得! | Excelの森] | |||
=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,31) | |||
==== 条件付き書式で行に色 ==== | |||
[https://www.crie.co.jp/chokotech/detail/270/ 条件付き書式を使って特定の文字が入っている行に色を付ける|クリエアナブキのちょこテク] | |||
# 塗りつぶしたい範囲を選択して [条件付き書式]-[新しいルール]。 | |||
# [数式を使用して、書式設定するセルを決定] | |||
# 数式にセルの条件を記入する (例: =$A15="-")。 | |||
# [書式] で塗りつぶす色を選択。 | |||
==== 非表示・フィルター条件確認 ==== | |||
https://chatgpt.com/share/687851b9-8118-800b-818c-c1b60768bcfb | |||
セルにフィルターがかかっているが、その条件がわからないことがある。 | |||
確認方法がいくつかある。 | |||
# フィルターのヘッダー部分が漏斗マークになっていれば、それがフィルター条件。 | |||
# 非表示の列があって、そこでフィルターになっていることがある。 | |||
# 1-2がないなら、手動非表示の可能性がある。 | |||
基本は1-2で条件を特定可能。 | |||
==== 大量セルのオートフィル ==== | ==== 大量セルのオートフィル ==== | ||
| 232行目: | 266行目: | ||
[ツール]-[オプション]-[表示]-[ゼロ値のチェックを外す] | [ツール]-[オプション]-[表示]-[ゼロ値のチェックを外す] | ||
=IF(Sheet1!A1="","",Sheet1!A1) | =IF(Sheet1!A1="","",Sheet1!A1) | ||
基本はif関数で判定して明示的に空白にするしかない。 | |||
==== 置換 ==== | ==== 置換 ==== | ||
| 255行目: | 290行目: | ||
ちなみに、条件付き書式、関係ある?</blockquote> | ちなみに、条件付き書式、関係ある?</blockquote> | ||
==== セルの保護 ==== | |||
[https://www.pc-koubou.jp/magazine/41273 Excelで特定のセルを変更できないようにする方法 | パソコン工房 NEXMAG] | |||
# 範囲選択-右クリック-[セルの書式設定]-[保護]-[☑ロック] | |||
# [校閲](シートのタブ右クリック)-[シートの保護]-[☑シートとロックされたセルの内容を保護する] | |||
これで指定範囲をロックできる。シート全体の保護機能を有効にする必要があるので注意する。 | |||
[シートの保護] は注意が必要。許可する権限が選べて、これを選ばないとロックしていないセルも変更不能になるので注意する。 | |||
==== データの入力規則 ==== | |||
[https://excel-komarigoto.com/excel%e3%81%ae%e4%bd%bf%e3%81%88%e3%82%8b%e3%83%86%e3%82%af%e3%83%8b%e3%83%83%e3%82%af/excel%e3%81%ae%e5%85%a5%e5%8a%9b%e8%a6%8f%e5%89%87%e3%82%92%e6%a5%b5%e3%82%81%e3%82%8b/%e5%85%a5%e5%8a%9b%e8%a6%8f%e5%89%87%e3%81%8c%e8%a8%ad%e5%ae%9a%e3%81%95%e3%82%8c%e3%81%a6%e3%81%84%e3%82%8b%e3%82%bb%e3%83%ab%e3%82%92%e8%a6%8b%e3%81%a4%e3%81%91%e3%82%8b%e6%96%b9%e6%b3%95/ [EXCEL]入力規則が設定されているセルを見つける方法|EXCEL屋(エクセルや)] | |||
データの入力規則の設定されているセルは見た目ではわからない。 | |||
[ホーム]-[検索と選択]-[データの入力規則] で見つけられる。 | |||
=== 数式 === | |||
==== 日時 ==== | |||
===== 加減算 ===== | |||
[https://daitaideit.com/excel-date-edate-eomonth/ 【Excel】日付の加算と引き算をする【DATE、EDATE、EOMONTHを使う】] | |||
日時の入ったセルに対して、整数の加減算を行うと、1日単位の計算になる。これで日と週 (7) の計算はできる。 | |||
月の加減算はEDATE関数を使う。年は12か月として扱う。 | |||
EDATE(日付, 加減算月) | |||
===== 時刻判定 ===== | |||
[https://daitaideit.com/excel-time-extract/#mokuzi3 【Excel】時、分、秒の時間を抽出【HOUR、MINUTE、SECONDを使う】] | |||
日時セルから時刻の抽出。 | |||
=VALUE(TEXT(A1, "hh:mm:ss")) | |||
これで抽出できる。 | |||
時刻の値への変換。 | |||
=TIMEVALUE("17:00:00") | |||
これで、日時が特定時刻かどうかを判定できる。 | |||
===== 参照表示 ===== | |||
https://grok.com/share/c2hhcmQtMw%3D%3D_3ad7d60f-2f33-4059-800e-8da1d43e9bc0 | |||
日時セルを別のセルで参照すると、シリアル値になってしまう。表示形式の維持には工夫が必要。 | |||
# 参照先セルの書式設定をコピー。 | |||
# TEXT関数 | |||
基本的にはどちらかしかない。 | |||
== Word == | == Word == | ||
| 488行目: | 573行目: | ||
==== Mozilla Thunderbird ==== | ==== Mozilla Thunderbird ==== | ||
===== Other ===== | |||
====== Gmailの [すべてのメール] の重複 ====== | |||
https://chatgpt.com/share/68917c4b-03f4-800b-9850-7ac5030d399e | |||
いつからか、ThunderbirdのGmailで [すべてのメール] が2個表示されていて、ほぼ同じ内容が同期されている。 | |||
IMAPのラベルとフォルダーの関係。内部的にGmailは[Gmail]/All Mailで管理している。 | |||
Gmail側では [[Gmail]/&MFkweTBmMG4w4TD8MOs-] みたいな名前で同期されていた。 | |||
Thunderbirdの該当フォルダーの[General Information]-[Location]=imap://senoo.ken%40gmail.com@imap.gmail.com/%5BGmail%5D/%26MFkweTBmMG4w4TD8MOs- | |||
重複の解消方法。 | |||
# サイドバーのgmailアカウントを右クリック ([File])-[Subscribe] で該当フォルダーのチェックを解除する。 | |||
# Gmailで[[Gmail]/&MFkweTBmMG4w4TD8MOs-]のラベル右端…-[ラベルを削除] | |||
これで解消される。 | |||
===== プロファイルの統合 ===== | ===== プロファイルの統合 ===== | ||
| 497行目: | 602行目: | ||
===== 迷惑メール対策 ===== | ===== 迷惑メール対策 ===== | ||
====== 設定 ====== | |||
https://chatgpt.com/share/68047848-7454-800b-9013-a891e572c0d1 | https://chatgpt.com/share/68047848-7454-800b-9013-a891e572c0d1 | ||
| 519行目: | 626行目: | ||
これで有効になる。 | これで有効になる。 | ||
====== 迷惑メール バイバイ! ====== | |||
* [https://app.macha795.com/junk-mail-byebye-top/ 迷惑メール バイバイ! | プロガジ app] | |||
* [https://app.macha795.com/junk-mail-byebye-desc/ 「迷惑メール バイバイ!」機能紹介 | プロガジ app] | |||
標準の迷惑メール機能だと、すり抜けるものがある。それをカバーしてくれる模様。 | |||
==== Gmail ==== | ==== Gmail ==== | ||
| 526行目: | 640行目: | ||
[設定]-[詳細/Advanced]-[未読メッセージ アイコン/Unread message icon]=[◎ 有効にする/Enabled] | [設定]-[詳細/Advanced]-[未読メッセージ アイコン/Unread message icon]=[◎ 有効にする/Enabled] | ||
Inboxのカテゴリーがあると、うまく機能しないことがある模様。無効にすると件数表示が正常に機能している模様。 | |||
===== デスクトップ通知 ===== | ===== デスクトップ通知 ===== | ||
[設定]-[全般/General]-[Desktop notifications]-[◎ メール通知(新規メール) ON/New mail notifications on] | [設定]-[全般/General]-[Desktop notifications]-[◎ メール通知(新規メール) ON/New mail notifications on] | ||
===== Inboxのカテゴリーの無効化 ===== | |||
いつごろからか、Gmailは受信トレイがデフォルトでカテゴリーが有効になっていて、勝手にカテゴリーに振り分けられる。 | |||
Promotionとかに受信メールが振り分けられたりしていて、見落とす。 | |||
無効にする方法がある。 | |||
[https://support.google.com/mail/answer/3094499?hl=ja&co=GENIE.Platform%3DDesktop&oco=1#zippy=%2C%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%AE%E3%82%BF%E3%83%96%E3%81%AB%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%2C%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%92%E5%88%A5%E3%81%AE%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%81%AB%E7%A7%BB%E5%8B%95%E3%81%99%E3%82%8B Gmail で受信トレイのカテゴリを追加または削除する - パソコン - Gmail ヘルプ] | |||
[Settings]-[See all settings]-[Inbox]-[Categories] のチェックをすべて外す。 | |||
==== Outlook ==== | |||
===== 通知 ===== | |||
[https://qiita.com/rie1234k/items/1715ec3136d6c4c5037a Outlook on the web デスクトップ通知の設定と表示時間の変更 #Windows11 - Qiita] | |||
2か所で設定が必要。 | |||
まずOutlook web版の設定。 | |||
[設定]-[全般]-[通知] をオンにする。 | |||
続いて、Windowsパソコンの設定。 | |||
[設定]-[アクセシビリティ]-[視覚効果]-[この時間が経過したら通知を破棄する] | |||
ここで表示時間を選ぶ。 | |||
== VBA == | |||
=== Grammar === | |||
==== Variable ==== | |||
[https://learn.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/declaring-variables 変数を宣言する (VBA) | Microsoft Learn] | |||
===== 宣言 ===== | |||
[https://basictech-blog.com/vba-variant/ 【VBA】変数を宣言しない場合の挙動(Variant型) | プログラミング勉強メモ] | |||
[http://www.officetanaka.net/excel/vba/beginner/06.htm Office TANAKA - 今さら聞けないVBA[変数って宣言しなくちゃいけないの?]] | |||
Dim <VariableName> [As <DataType>] | |||
変数宣言しないで変数を使うと、自動的にVariant型で宣言されたとみなされる。 | |||
Variant型はメモリーを多く使うので、型宣言したほうがいい。変数名間違いも検知してくれる。 | |||
なお、変数の宣言と代入を同時にはできない。分けるしかない。 | |||
===== Option Explicit ===== | |||
[ツール]-[オプション]-[編集]-[☑変数の宣言を強制する] を指定したほうがいい。 | |||
===== Type ===== | |||
[https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/data-type-summary データ型の概要 | Microsoft Learn] | |||
{| class="wikitable" | |||
!データ型 | |||
!記憶領域サイズ | |||
!範囲 | |||
|- | |||
|[[/learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/boolean-data-type|Boolean]] | |||
|2 バイト | |||
|True または False | |||
|- | |||
|[[/learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/byte-data-type|Byte]] | |||
|1 バイト | |||
|0 ~ 255 | |||
|- | |||
|[[/learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/collection-object|Collection]] | |||
|不明 | |||
|不明 | |||
|- | |||
|[[/learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/currency-data-type|Currency]] (スケーリングされた整数) | |||
|8 バイト | |||
| -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 | |||
|- | |||
|[[/learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/date-data-type|Date]] | |||
|8 バイト | |||
| -657,434 (100 年 1 月 1 日) から 2,958,465 件 (9999 年 12 月 31 日) | |||
|- | |||
|[[/learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/decimal-data-type|Decimal]] | |||
|14 バイト | |||
| +/-79,228,162,514,264,337,593,543,950,335 (小数点なし) | |||
+/-7.9228162514264337593543950335 (小数点以下 28 桁) | |||
+/-0.0000000000000000000000000001 (0 ではない最小の値) | |||
|- | |||
|[[/learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/dictionary-object|Dictionary]] | |||
|不明 | |||
|不明 | |||
|- | |||
|[[/learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/double-data-type|Double]] (倍精度浮動小数点数) | |||
|8 バイト | |||
| -1.79769313486231E308 から -4.94065645841247E-324 (負の値) | |||
4.94065645841247E-324 から 1.79769313486232E308 (正の値) | |||
|- | |||
|[[/learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/integer-data-type|Integer]] | |||
|2 バイト | |||
| -32,768 〜 32,767 | |||
|- | |||
|[[/learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/long-data-type|Long]] (Long 整数) | |||
|4 バイト | |||
| -2,147, 483,648 〜 2,147, 483,647 | |||
|- | |||
|[[/learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/longlong-data-type|LongLong]] (LongLong 整数) | |||
|8 バイト | |||
| -9,223,372,036,854,775,808 から 9,223,372,036,854,775,807 | |||
64 ビット プラットフォームでのみ有効。 | |||
|- | |||
|[[/learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/longptr-data-type|LongPtr]] (32 ビット システムでは Long 整数、64 ビット システムでは LongLong 整数) | |||
|32 ビット システムでは 4 バイト | |||
64 ビット システムでは 8 バイト | |||
| -2,147,483,648 から 2,147,483,647 (32 ビット システム) | |||
-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807 (64 ビット システム) | |||
|- | |||
|[[/learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/object-data-type|Object]] | |||
|4 バイト | |||
|任意の Object 参照 | |||
|- | |||
|[[/learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/single-data-type|Single]] (単精度浮動小数点数) | |||
|4 バイト | |||
| -3.402823E38 から -1.401298E-45 (負の値) | |||
1.401298E-45 から 3.402823E38 (正の値) | |||
|- | |||
|[[/learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/string-data-type|String]] (可変長) | |||
|10 バイト + 文字列の長さ | |||
|0 〜 約 20 億 | |||
|- | |||
|文字列型 (String) (固定長) | |||
|文字列の長さ | |||
|1 〜 約 65,400 | |||
|- | |||
|[[/learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/variant-data-type|Variant]] (数値) | |||
|16 バイト | |||
|最大で Double の範囲までの任意の数値 | |||
|- | |||
|バリアント型 (Variant) (文字) | |||
|22 バイト + 文字列長 (64 ビット システムでは 24 バイト) | |||
|可変長 文字列型 と同じ範囲 | |||
|- | |||
|[[/learn.microsoft.com/ja-jp/office/vba/language/how-to/user-defined-data-type|ユーザー定義]] (Type を使用) | |||
|要素に必要な数 | |||
|各要素の範囲は、そのデータ型の範囲と同じです。 | |||
|} | |||
===== String ===== | |||
====== About ====== | |||
[https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/string-data-type 文字列データ型 | Microsoft Learn] | |||
リテラル地は以下のいずれかで使用可能。 | |||
* 二重引用符 | |||
* Chr関数 | |||
一重引用符はコメントで使えないので注意する。 | |||
====== 空判定 ====== | |||
[https://vbabeginner.net/check-blank-cell/ VBAで空白セルを判定する方法 | Excel作業をVBAで効率化] | |||
Range.Value = "" | |||
Range.Text = "" | |||
上記が無難。他にIsEmpty関数があるが、空文字はtrue扱いになる。 | |||
===== 配列 ===== | |||
* [https://learn.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/using-arrays 配列の使用 (VBA) | Microsoft Learn] | |||
* [https://learn.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/declaring-arrays 配列を宣言する (VBA) | Microsoft Learn] | |||
* [https://learn.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/understanding-parameter-arrays パラメーター配列について (VBA) | Microsoft Learn] | |||
配列と通常変数の違いは、宣言時にサイズの指定が必要な点。Option Base 1で明示的に指定しない限り、0が添え字の始まり。 | |||
Dim MyArray(10, 10) As Integer | |||
Dim sngArray() As Single | |||
====== 一括代入 ====== | |||
[https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/array-function?source=recommendations Array 関数 (Visual Basic for Applications) | Microsoft Learn] | |||
[https://officeqa.net/vba-hairetu/ 【VBAの配列】値の一括代入と高速処理 | オフィスのQ&A] | |||
Variantを返すArray関数を使うしかない。 | |||
Dim str() As Variant | |||
str = Array("りんご", "みかん", "すいか") | |||
====== 結合・追加 ====== | |||
* [https://www.sejuku.net/blog/38356#index_id7 【VBA入門】配列総まとめ(初期化、ループ操作、コピー、結合、比較) | 侍エンジニアブログ] | |||
* [https://www.bayashita.com/p/entry/show/217 2個の配列をマージする方法[エクセルVBA] : バヤシタ] | |||
Sub test1() | |||
Dim names1 As Variant | |||
Dim names2 As Variant | |||
Dim names3 As Variant | |||
names1 = Array("太郎", "次郎", "三郎") | |||
names2 = Array("四郎", "五郎", "六郎") | |||
'配列の内容を全て文字列として結合した後、分割して一つの配列にする。 | |||
names3 = Split(Join(names1, vbCrLf) & vbCrLf & Join(names2, vbCrLf), vbCrLf) | |||
'中身の確認 | |||
Dim name As Variant | |||
For Each name In names3 | |||
Debug.Print name | |||
Next name | |||
End Sub | |||
Private Function ArrayMerge(array1 As Variant, array2 As Variant) | |||
Dim separator As String | |||
separator = "&" | |||
ArrayMerge = Split(Join(array1, separator) & separator & Join(array2, separator), separator) | |||
End Function | |||
簡単にはできない。Joinでいったん文字列結合して、結合文字でSplitする。要素に結合文字が含まれているとだめなので、結合文字に注意する。 | |||
===== Set ===== | |||
* [https://learn.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/creating-object-variables オブジェクト変数の作成 (VBA) | Microsoft Learn] | |||
* [https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/set-statement Set ステートメント (VBA) | Microsoft Learn] | |||
オブジェクト変数 (オブジェクトへの参照を含む変数) の代入・割当時は、Set文が必要。ポインターみたいな扱いだからだろう。mallocみたいな扱いなんだと思う。 | |||
オブジェクト式またはNothingを割り当てられる。 | |||
Set MyObject = YourObject ' Assign object reference. | |||
Set MyObject = Nothing ' Discontinue association. | |||
Newキーワードを使って、宣言と代入を同時にできる。 | |||
Set MyObject = New Object ' Create and Assign | |||
関数が実行されている現在のインスタンス参照はMeでできる。this相当。 | |||
==== Statement ==== | |||
===== If...Then...Else ===== | |||
[https://learn.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/using-ifthenelse-statements If...Then...Else ステートメントを使用する (VBA) | Microsoft Learn] | |||
1行の場合、End Ifを省略可能。 | |||
If myDate < Now Then myDate = Now | |||
Function Bonus(performance, salary) | |||
If performance = 1 Then | |||
Bonus = salary * 0.1 | |||
ElseIf performance = 2 Then | |||
Bonus = salary * 0.09 | |||
ElseIf performance = 3 Then | |||
Bonus = salary * 0.07 | |||
Else | |||
Bonus = 0 | |||
End If | |||
End Function | |||
===== Loop ===== | |||
反復。いくつか気泡がある。 | |||
* Do...Loop | |||
* For Each...Next | |||
* For...Next | |||
====== Do...Loop ====== | |||
[https://learn.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/using-doloop-statements Do...Loop ステートメント (VBA) を使用する | Microsoft Learn] | |||
Do While myNum > 10 | |||
myNum = myNum - 1 | |||
counter = counter + 1 | |||
Loop | |||
Do | |||
myNum = myNum - 1 | |||
counter = counter + 1 | |||
Loop While myNum > 10 | |||
====== For Each...Next ====== | |||
[https://learn.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/using-for-eachnext-statements For Each...Next ステートメントを使用する (VBA) | Microsoft Learn] | |||
Collectionと配列の要素を反復できる。非常に重要。 | |||
Sub Add10ToAllCellsInRange() | |||
Dim rng As Range | |||
For Each rng In Range("A1:A10") | |||
rng.Value = rng.Value + 10 | |||
Next | |||
End Sub | |||
Sub SetArrayValue() | |||
Dim TestArray(10) As Integer, I As Variant | |||
For Each I In TestArray | |||
TestArray(I) = I | |||
Next I | |||
End Sub | |||
====== Continue ====== | |||
Continueはない。代わりにGotoでジャンプする。 | |||
Public Sub sample() | |||
Dim r As Long | |||
For r = 1 To 10 | |||
'■セル値が空白の場合、ループをスキップし、次の行を処理させる(Goto Continue) | |||
If Cells(r, 1) = "" Then | |||
GoTo Continue | |||
End If | |||
Continue: | |||
Next r | |||
End Sub | |||
====== Break ====== | |||
[https://vba-create.jp/vba-for-next-exit-for/ For文を途中で抜ける(ループを途中で終了させる)【break】【Exit】【ExcelVBA】 | VBA Create] | |||
ループの終了はExit。現在のループだけ終了できる。複数終了したい場合、複数必要。または、Gotoで一括ジャンプする。 | |||
===== Exit ===== | |||
[https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/exit-statement Exit ステートメント (VBA) | Microsoft Learn] | |||
breakとreturn相当。 | |||
以下の書式。 | |||
Exit <directive> | |||
Do/For/Function/Property/Subを指定可能。 | |||
Do/Forは現在のループを終了するbreak相当。 | |||
Funciton/Property/Subは現在の関数を終了するreturn相当。 | |||
==== 関数 ==== | |||
===== About ===== | |||
[https://learn.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/calling-sub-and-function-procedures Sub プロシージャと Function プロシージャの呼び出し (VBA) | Microsoft Learn] | |||
[https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/function-statement Function ステートメント (VBA) | Microsoft Learn] | |||
[https://daitaideit.com/vba-function-sub-difference/ 【VBA】SubとFunctionの違い【戻り値の有無、参照が可能か、関数として使えるか】] | |||
フォームのボタンへの登録可否の都合で、SubとFunctionの2種類がある。 | |||
Functionは戻り値があって、ワークシート関数としても使える。Subは戻り値なし。ただし、参照が可能でフォームボタンに登録可能。 | |||
===== 動的呼出 ===== | |||
* https://grok.com/share/c2hhcmQtMw%3D%3D_e82d24ca-e17f-4fc2-851f-b3a20f50495b | |||
* https://grok.com/share/c2hhcmQtMw%3D%3D_a2024077-9234-42c0-ad6a-8a9867a518c2 | |||
関数名の変数や文字列から関数を実行したい時がある。 | |||
CallByNameとApplilcation.Runの2種類の方法がある。 | |||
* CallByName: メソッドの実行。 | |||
* Application.Run: マクロの実行。 | |||
マクロにするか、メソッドにする必要がある。 | |||
===== Option ===== | |||
全部の関数、プロシージャーより前に記載必要。 | |||
====== Explicit ====== | |||
[https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/option-explicit-statement Option Explicit ステートメント (VBA) | Microsoft Learn] | |||
Option Explicit | |||
変数の定義後使用を強制する。未定義変数アクセス時に例外発生。 | |||
変数名間違いなどの防止のため基本的には常につけたほうがいい。 | |||
==== Other ==== | |||
===== 継続行 ===== | |||
[https://learn.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/program-structure/how-to-break-and-combine-statements-in-code 方法: コード内のステートメントを中断して結合する - Visual Basic | Microsoft Learn] | |||
改行位置にアンダースコア_を配置する。直前にはスペースが必要。行末コメントの場合、コメント末尾に必要。 | |||
cmd.CommandText = _ | |||
"SELECT * FROM Titles JOIN Publishers " _ | |||
& "ON Publishers.PubId = Titles.PubID " _ | |||
& "WHERE Publishers.State = 'CA'" | |||
複数の文を1行に配置する場合、コロン:で区切る。 | |||
text1.Text = "Hello" : text1.BackColor = System.Drawing.Color.Red | |||
=== Excel === | |||
==== Object ==== | |||
===== ListObjects ===== | |||
テーブル、構造化参照を取得できる。データ範囲を自動拡張してくれるので楽。 | |||
Set lo = ws.ListObjects(ws.Name) | |||
For Each row In lo.Range.Rows() | |||
テーブル名で取得する。 | |||
==== Cell ==== | |||
===== 範囲有無判定 ===== | |||
[https://learn.microsoft.com/ja-jp/office/vba/api/excel.range.find Range.Find メソッド (Excel) | Microsoft Learn] | |||
Range.Find関数を使うのがエレガント。 | |||
見つからなければ、Nothingを返すのでIs Nothingで判定すればいい。 | |||
If ThisWorkbook.Sheets("マスタ").Range("D1:D8").Find(row.Cells(2).Value, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then GoTo NextRow | |||
LookIn/LookAt/SearchOrder/MatchByteは保存されるので注意する。 | |||
===== Value/Text ===== | |||
セルの値の参照方法がいくつかある。 | |||
Range.Value | |||
Range.Text | |||
ファイル出力などする際は、Range.Textがいい。Valueだと例えば、日時データは00:00だと時刻部分が省略される。 | |||
===== Color ===== | |||
[https://www.tipsfound.com/vba/07006-vba VBA セルに色を設定する (Interior.Color, ColorIndex)] | |||
* 文字色: Range.Font.Color/Cells.Font.Color | |||
* 背景色: Interior.Color | |||
色はRGB関数で指定する。 | |||
===== Clear ===== | |||
[https://excel-ubara.com/excelvba1/EXCELVBA339.html セルのクリア(Clear,ClearContents)|VBA入門] | |||
Range (Cells, Rows, Columns, Range) に削除用のメソッドがある。 | |||
{| class="wikitable" | |||
|メソッド | |||
|説明 | |||
|- | |||
|'''Clear''' | |||
|全体(数式・文字・書式・コメント全て)をクリアします。 | |||
|- | |||
|ClearComments | |||
|コメントを消去します。 | |||
|- | |||
|'''ClearContents''' | |||
|数式と文字を削除します。 | |||
|- | |||
|ClearFormats | |||
|書式設定を削除します。 | |||
|- | |||
|ClearNotes | |||
|コメントを削除します。 | |||
|- | |||
|ClearOutline | |||
|アウトラインを消去します。 | |||
|- | |||
|ClearHyperlinks | |||
|2010以降のみ、ハイパーリンクを削除します。 | |||
|} | |||
Range.Text = ""だとうまくいかないことがある。たぶんValueかClearContentsがいいと思う。 | |||
==== イベント ==== | |||
===== Worksheet.Changeイベント ===== | |||
* [https://learn.microsoft.com/ja-jp/office/vba/api/Excel.Worksheet.Change Worksheet.Change イベント (Excel) | Microsoft Learn] | |||
* [https://vbabeginner.net/worksheet_change/ VBAでセルの値が変更時に処理を行う(Worksheet_Change) | Excel作業をVBAで効率化] | |||
セルの値の変更時に、処理が可能。 | |||
VBA画面で該当シート-[Worksheet]-[Change] を選ぶ。 | |||
Private Sub Worksheet_Change(ByVal Target As Range) | |||
End Sub | |||
Target: 変更された範囲が渡される。 | |||
=== Other === | |||
==== 開発タブ ==== | |||
デフォルトではVBAの開発UIが非表示になっている。 | |||
[ファイル]-[オプション]-[リボンのユーザー設定] から [☑開発] を選ぶ。 | |||
==== 置換モード ==== | |||
[https://net-trouble.portal.jp.net/archives/31709 エクセルVBAのエディターが上書きモードになる理由は? - ネットトラブルポータル] | |||
Insertキーを押すと上書きモードになる。注意する。 | |||
==== セル範囲をループ ==== | |||
[https://learn.microsoft.com/ja-jp/office/vba/excel/concepts/cells-and-ranges/looping-through-a-range-of-cells セル範囲の各セルをループで操作する | Microsoft Learn] | |||
==== 現在日時 ==== | |||
[https://vbabeginner.net/date-time-now/ VBAで今日の日付と現在時刻を取得する(Date、Time、Now) | Excel作業をVBAで効率化] | |||
Date()/Time()/Now()関数でDateオブジェクトを取得できる。これをFormat関数で書式化して使う。 | |||
Format(Now(), "yyyy年mm月dd日 hh時mm分ss秒") | |||
==== Debug.Print ==== | |||
VBAでのデバッグはDebug.Printの出力をイミディエイトウィンドウに表示させて確認するのが基本。 | |||
[https://www.sejuku.net/blog/72223 【ExcelVBA入門】最初に覚えると幸せになれるDebug.Printの使い方! | 侍エンジニアブログ] | |||
==== オブジェクト変数またはWithブロック変数が設定されていません。 ==== | |||
[https://extan.jp/?p=2799 VBA エラー 91「オブジェクト変数またはWithブロック変数が設定されていません。」の原因と対処方法 - エク短|Extan.jp] | |||
Sub エラーテスト1R() | |||
Dim objRG As Range | |||
Set objRG = Range("A1:B10") | |||
End Sub | |||
インスタンス変数代入時はSetが必要とか。 | |||
==== マクロブロックの解除 ==== | |||
[https://support.microsoft.com/ja-jp/topic/%E6%BD%9C%E5%9C%A8%E7%9A%84%E3%81%AB%E5%8D%B1%E9%99%BA%E3%81%AA%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%8C%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F-0952faa0-37e7-4316-b61d-5b5ed6024216 潜在的に危険なマクロがブロックされました - Microsoft サポート] | |||
ファイル-[プロパティー]-[☑ブロックを解除] | |||
2025年9月19日 (金) 14:31時点における最新版
Font
いくつか愛用しているフォントがある。
- IPAexフォントおよびIPAフォントについて | 一般社団法人 文字情報技術促進協議会: 日本語の日本公式フォント。IPAexMincho/IPAexGothic。
- Miguフォント : M+とIPAの合成フォント: Miguフォント。Migu 1C/Migu1M。IPAフォントとM+フォントの合成。半濁点の視認性が高かったり、コーディング用フォントとして手堅い。
日本語と英語でフォントを分けられないソフトがあったりするので、必然的に日本語フォントが優先される。
- 明朝体: IPAexMinch
- ゴシック: Migu 1C
- 等幅: Migu 1M
- スライド: Migu 1C
以前はスライド用にMigMix 1P/Migu 1Pを使っていた。視認性が高いから。その後、2011-04-18にMigu 1Cとさらに視認性を重視したフォントが生まれた (変更履歴 : M+とIPAの合成フォント)。Migu 1Cでいい。
Power Query
Power Query(パワークエリ)とは?Excelの限界を超える画期的なデータ処理を実現!
[データ]-[データの取得と変換]
データソースの変更
ファイルを変更して、一度読み込んだデータを別のデータに変更する。
- [データ]-[クエリと接続]-サイドバーからクエリをダブルクリック
- [Power Query エディター]-[クエリの設定]-[ソース]
なお、そのままやると列数が増えた場合に対応できない。
[ソース] で数式を [Columns=null] に変更するとOK。
Spreadsheet
文字数ソート
エクセル 文字数 多い順 並び替え -エクセルの列の並び替えなのです- Excel(エクセル) | 教えて!goo
=IF(A2="","",LEN(A2))
そのままではできないので、作業用シートを作る。
Cell
重複判定
Excelで重複したデータを簡単に確認する方法[COUNTIF関数] | パソコン工房 NEXMAG
別シートなどでCOUNTIF。これで重複があれば2以上になる。最後フィルターして、該当セル番地などが分かる。
空判定
ISBLANK 関数を使用すると、結果は false になります - Microsoft 365 Apps | Microsoft Learn
Excelの話。
ISBLANKは空文字の場合、FALSEになる。
セルの空白判定に役立つ関数がいくつかある。
- ISBLANK=空白の場合。
- ISERR=N/A以外のエラーの場合。
- ISERROR=エラーの場合。
- ISNA=N/Aの場合。
- ISNONTEXT=空白セルと、文字以外のセル。
空文字の場合、ISBLANK=FALSE、ISERR/ISERROR/ISNONTEXT=TRUEになる。
これを利用して、(ISBLANK || ISERR)にすると、空白を判定できると思われる。
文字列
表計算ソフトで、文字列リテラルは、二重引用符で囲む。一重引用符はNG。文字列として二重引用符を使う場合、二重引用符内で、二重にする。
デフォルト値
- Logical operators in Excel: equal to, not equal to, greater than, less than
- Default values in table cells - Microsoft Community
- Create conditional formulas - Microsoft Support
- worksheet function - In Excel, can I provide a "default value" in case my formula returns #NA? - Super User
IF関数でやるしかない。条件演算子、Null合体演算子、OR/||などは使えない。
IFERRORに近い機能がある。
先頭の一重引用符
Excelでは先頭の一重引用符 (アポストロフィー) はセルが文字列であることを示す特殊なマーク扱い。
先頭の一重引用符を残したい場合、工夫が必要。
- 一重引用符を二重にする ('text')。
- 先頭を=で始める (="'text'")。
=で始めると末尾の"の削除も必要になる。一重引用符の二重がシンプル。
検索特殊文字
vlookupなど検索系関数のキーの文字列では、特殊な文字がある。そのまま使うと、解釈されてマッチしない。
具体的には、~があるとうまく検索できない。
LibreOffice Calcだとデフォルトで正規表現が使えるので|もみなされてしまう。設定を変えるか、他の文字にするとよい。
固有値の抽出
https://www.ablebits.com/office-addins-blog/2016/04/21/get-list-unique-values-excel/
https://ask.libreoffice.org/en/question/101374/find-distinct-values-in-a-column-formula-for-calc/
https://office-hack.com/excel/duplicate-delete/
https://www.pc-koubou.jp/magazine/34116
年月ごとの集計
関数で月ごと・年月ごと・年ごとに値を抽出し合計・集計する - 病院SEにゃんとのPCトラブル解決&Excel関数等活用術
SUMIFSかSUMPRODUCTで実現可能。SUMPRODUCTだと参照用セルが不要。
=SUMPRODUCT((YEAR(集計日付列範囲)=YEAR(対象日付))*(MONTH(集計日付列範囲)=MONTH(対象日付)),集計対象列範囲)
売上集計などで重宝する。
包含判定
あるセルの内容が、リストに含まれているかを判定したいことがある。
Excelだとfind関数でできる。LibreOffice Calcだとfind関数は文字列内の検索になっていて意味が違う。
match関数か、countifを使うとどちらでも対応できる。countifが直感的。matchは位置の添字も欲しい場合。
Excel
Other
変更履歴
https://chatgpt.com/share/68661e71-5470-800b-85fe-38bcad8be136
Excelは変更履歴あまりできない。昔のxlsだとあったが、xlsxでなくなった。基本はWordで変更履歴は取り扱える。
Excelでやる場合、コメントになる。次のコメント・前のコメントがあるので、これで変更箇所の情報を残せる。
オートシェイプの全選択
Ref: シート上の図形(オートシェイプ)を全て選択した状態にするショートカットキー【エクセルTips】
[C-g]-[セル選択]-[オブジェクト]
ファイルのインポート
- テキスト (.txt または .csv) ファイルのインポートまたはエクスポート - Microsoft サポート
- 【簡単】セル内改行を含むCSVをExcelにインポートする方法。PowerQueryで列ずれなし。 | 実践で使うExcelとAccessの話
複数のCSVをシートごとにインポートして、整理したいことがある。単にCSVを開くだけだとやりにくい。
[データ]-[テキストまたは CSV から]-CSVファイルを選択-[インポート]-[データの変換]
CSVに改行が入っていると、崩れる。インポート時に設定がある。
[適用したステップ]-[ソース] をダブルクリック-[改行]=[引用符で囲まれた改行を無視] を選択-[OK]-[閉じて読み込む]。
データの変換時に、列の型も指定できる。全部文字列にすると、エラーなく全部読込はできる。
R1C1参照形式
列の表示が数字になってしまったのを、元のアルファベットに戻したい。|中小企業ソリューション|キヤノン
列を番号で表示して確認したいことがある。
[ファイル]-[オプション]-[数式]-[数式の処理]-[□R1C1参照形式を使用する]
これをオンにする。
Type
日付の数値対策
【Excel】入力した日付が5桁の数字になるのを防ぐ「書式設定」の確認方法 | 特選街web
Excelの日付が数字になるときの対処法 - [その他 + その他 ぺんたん info]
日付のデータが5桁の数字になって困ることがある。
これはセルの書式設定が、[標準] や [数値] になっているから。[日付] に変更すれば解決する。
セル参照、数式の場合は、TEXT関数で表示形式を指定する必要がある。"yyyy-mm-dd"を指定しておくとよいだろう。
文字の数値変換
文字列の数字を数値に変換する方法がいくつかある。
- value
- 1*
+はだめで、代わりに1*。これがシンプル。
数字がない場合、#VALUEのエラーになる。回避したければ、IFERRORで囲む。
=1*IFERROR(A1, 0)
文字列から数字の抽出
固定幅で決まっているならともかく、任意の位置の場合、シンプルな方法はない。
「Excel: Extract number from text string」
文字がない場合0。
=SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)) * ROW(INDIRECT("1:"&LEN(A2))), 0), ROW(INDIRECT("1:"&LEN(A2))))+1, 1) * 10^ROW(INDIRECT("1:"&LEN(A2)))/10)
文字がない場合空。
=IF(SUM(LEN(A2)-LEN(SUBSTITUTE(A2, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("$1:$"&LEN(A2))),1))* ROW(INDIRECT("$1:$"&LEN(A2))),0), ROW(INDIRECT("$1:$"&LEN(A2))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(A2)))/10),"")
ただ、どちらの方法も1の単独数値はなぜか抽出できない。
google sheets - Extract numbers from excel cell with mixed text - Stack Overflow
=MID(A1, SEARCH("(", A1) + 1, SEARCH(")", A1) - SEARCH("(", A1) - 1)
前後の囲み文字が分かっているならば、SEARCHを駆使するのがいい。
文字列内の数字判定
Excel: Check if cell contains number in text string - Stack Overflow
=0<COUNT(FIND({0,1,2,3,4,5,6,7,8,9},A1))
Cell
シート名参照
【エクセル】シート名を関数で表示する方法。表の題名をシート名から自動で取得! | Excelの森
=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,31)
条件付き書式で行に色
条件付き書式を使って特定の文字が入っている行に色を付ける|クリエアナブキのちょこテク
- 塗りつぶしたい範囲を選択して [条件付き書式]-[新しいルール]。
- [数式を使用して、書式設定するセルを決定]
- 数式にセルの条件を記入する (例: =$A15="-")。
- [書式] で塗りつぶす色を選択。
非表示・フィルター条件確認
https://chatgpt.com/share/687851b9-8118-800b-818c-c1b60768bcfb
セルにフィルターがかかっているが、その条件がわからないことがある。
確認方法がいくつかある。
- フィルターのヘッダー部分が漏斗マークになっていれば、それがフィルター条件。
- 非表示の列があって、そこでフィルターになっていることがある。
- 1-2がないなら、手動非表示の可能性がある。
基本は1-2で条件を特定可能。
大量セルのオートフィル
Excelで大量行のオートフィルを一気にしたい。|カルフ / Ph.D / メーカー研究職
- まずベースとなる範囲を選択。
- [ホーム]-[検索と選択]-[ジャンプ] (C-g)。
- オートフィルの端のセル番地を指定して、Shiftを押下したままOK
- [ホーム-[フィル]-[連続データの作成]-[オートフィル]-[OK]
最大値位置の取得
【Excel】エクセルにて最大値や最小値のセルの場所(番号)を検索する方法【セル位置の取得】 | モアイライフ(more E life)
=MATCH(MAX($A$1:$A$11),A1:A11,0)
MATCHで (最大) 値のセルを検索する。
ゼロの非表示
空セルを参照したり、一部の計算結果が空白になる場合、0が表示されることがある。
いくつか方法がある。
[ツール]-[オプション]-[表示]-[ゼロ値のチェックを外す]
=IF(Sheet1!A1="","",Sheet1!A1)
基本はif関数で判定して明示的に空白にするしかない。
置換
文字列を置き換えるREPLACE関数とSUBSTITUTE関数 | ノンプログラミングWebアプリ作成ツール - Forguncy(フォーガンシー)| メシウス株式会社
- REPLACE: 文字位置を指定した置換。
- SUBSTITUTE: 文字の置換。
SUBSTITUTEは重宝する。
条件付書式で括弧をつけた時の空白セル
『条件付書式で括弧をつけた時の空白セル』(kibi) エクセル Excel [エクセルの学校]
空白ってのは セルデータなし なのか 数式の結果が ="" なのか?
どっちでしょ?
後者なら #;#;;(@)
前者なら書式標準で数式結果でカッコ対応。
ちなみに、条件付き書式、関係ある?
セルの保護
Excelで特定のセルを変更できないようにする方法 | パソコン工房 NEXMAG
- 範囲選択-右クリック-[セルの書式設定]-[保護]-[☑ロック]
- [校閲](シートのタブ右クリック)-[シートの保護]-[☑シートとロックされたセルの内容を保護する]
これで指定範囲をロックできる。シート全体の保護機能を有効にする必要があるので注意する。
[シートの保護] は注意が必要。許可する権限が選べて、これを選ばないとロックしていないセルも変更不能になるので注意する。
データの入力規則
[EXCEL入力規則が設定されているセルを見つける方法|EXCEL屋(エクセルや)]
データの入力規則の設定されているセルは見た目ではわからない。
[ホーム]-[検索と選択]-[データの入力規則] で見つけられる。
数式
日時
加減算
【Excel】日付の加算と引き算をする【DATE、EDATE、EOMONTHを使う】
日時の入ったセルに対して、整数の加減算を行うと、1日単位の計算になる。これで日と週 (7) の計算はできる。
月の加減算はEDATE関数を使う。年は12か月として扱う。
EDATE(日付, 加減算月)
時刻判定
【Excel】時、分、秒の時間を抽出【HOUR、MINUTE、SECONDを使う】
日時セルから時刻の抽出。
=VALUE(TEXT(A1, "hh:mm:ss"))
これで抽出できる。
時刻の値への変換。
=TIMEVALUE("17:00:00")
これで、日時が特定時刻かどうかを判定できる。
参照表示
https://grok.com/share/c2hhcmQtMw%3D%3D_3ad7d60f-2f33-4059-800e-8da1d43e9bc0
日時セルを別のセルで参照すると、シリアル値になってしまう。表示形式の維持には工夫が必要。
- 参照先セルの書式設定をコピー。
- TEXT関数
基本的にはどちらかしかない。
Word
キーワード変数
【Word】文書中に何度も登場する文字列を1か所変更するだけで他の箇所も一括で変更する方法 | My Life 8
例えば契約書などで、同じ氏名や住所が同一文書内に複数回登場することがある。一箇所変更すれば、全体も反映されるようにしたい。
ブックマークと相互参照を利用する。
- まずどこかで後で流用したい文字列を入力しておく (文書の先頭などわかりやすいだろう)。
- 登録対象文字列を選択して [挿入]-ブックマーク] を選び、わかりやすい名前でブックマークに登録する。
- 以後の登録した文字列を使いたい場所で、[挿入]-[相互参照] で先に登録したブックマークの参照を配置する。
- 文字列を一括置換したい場合、最初に登録したブックマークの文字列を別のものに変更する。
表内のタブ
【Word】表内でのタブ設定について | ヤマダパソコンスクール
枠組みなどで、表の中で基本文書を記述することがある。その際に、ルーラーによる揃えをしたくて、タブを入力したいが、次のセルに移動になってしまう。
C-TabでTabを入力できる。
LibreOffice Draw
テキストボックスの内部余白
text box internal margins - how to set them - English - Ask LibreOffice
テキストボックスに二重に余白がある。内部余白は、[Format]-[Text Attributes...] から変更可能。
グリッド
図形の配置でグリッドとスナップが重要。
グリッドの間隔類は、[Preferences]-[LibreOffice Draw]-[Grid] で設定する。
[Resolution] がグリッド (点) の表示間隔。その横の [Subdivision] はグリッド同士の細分化個数。グリッドをあまり細かくしすぎると、目が疲れる。
例えば、グリッドを1間隔にして、subdivisionを2にすると、0.5間隔でグリッドの間をスナップできる。
LibreOffice Calc
e-taFormula
evaluate
- worksheet function - LibreOffice Calc equivalent to Excel "Evaluate Formula" feature - Super User
- Is it possible to convert a text string to a formula? - English - Ask LibreOffice
- Evaluate math expressions - English - Ask LibreOffice
- Apache OpenOffice Community Forum - [Solved Evaluate a string - (View topic)]
セル内のテキストを数式として評価してほしい場面に遭遇した。
例えば、画素数 (720x720) の合計。Excelだとevaluateという関数があるが、Calcにはない。マクロなどで頑張る。あるいは、数式ではないがF9で数式に変換できるらしい。
PIM
Personal Information Manager - Wikipedia
PIMという個人情報管理用アプリの分類がある。
- カレンダー
- アドレス帳
- 電子メール
- タスク管理
- メモ帳
- 音声メモ
- 電卓
- 時計
- 電子辞書
General
docomoのメール
MozillaZine.jp フォーラム • トピック - 特定のメールだけ,画像が定位置に表示されません。
docomo関係のメールを受信すると画像などがうまく表示されず、ハイパーリンクも機能しない。
[View]-[Message Body As]-[Simple HTML] にすると、ハイパーリンクなどは機能する。
メールヘッダーの問題の模様。
- Content-Type: multipart/mixed; boundary="=_**********" + Content-Type: multipart/related; boundary="=_**********"
上記のように変更するとうまく表示されるらしい。
j
winmail.dat
MS outlookなどで使われる添付ファイルの形式。
Naming
RFC
- webmaster
- support
- info
- service
- pr
- billing
- 氏名
売上をアップするメールアドレス、商機を失うメールアドレス | マイナビニュース
infoやwebmasterなど企業サイトが備えるべきメールボックスのルール、ご存じですか? | 編集長ブログ―安田英久 | Web担当者Forum
rfc-jp.nic.ad.jp/rfc-jp/RFC2142-JP.txt
SuperTAINS News No.23 [Page.5]
【Mail】メールアドレス作成のガイドライン(RFC2142) – fumidzuki
公開用のメールアドレス。何にしようか考えていた。
RFC 2142でいくつか推奨されている。
info@ support@ answer@ inquery@ contact@ pubic@
contact@がやっぱり一番しっくりくる。info@ support@はRFC 2142にあるけど,これはビジネスより,サービスに紐付いたもの。個人でやる分にはサービス関係ないから,これは違う。publicも悪くはないのだけど,あまり一般的ではないか。
develop
GNU social JP管理人 (gnusocialjp@gnusocial.jp)'s status on Saturday, 08-Oct-2022 23:13:28 JST GNU social JP管理人
使用するメールアドレスに悩みます。GitのメールアドレスはGitのホスティングサービスに掲載され一般公開されます。
メーリングリストのメールアドレスも、返信方法によって引用されアーカイブで一般公開されます。
どう使い分けるのがよいでしょうか?案↓
GNU social JP管理人 (gnusocialjp@gnusocial.jp)'s status on Saturday, 08-Oct-2022 23:20:04 JST GNU social JP管理人
開発用のメールなので、1がいいですかね。仮に漏洩しても開発関係経由というのがわかるので。
- develop@domainのようなアドレスで共有
- develop@, ml@ で用途別
- contact@ で一般公開用で共有
1がいいと思う。
category
目的に応じて使い分けたほうがよさそう。
メールアドレスを何個ぐらい使い分けたら安全・快適に過ごせるのか - Dr.ウーパのコンピュータ備忘録
メールアドレス流出時の被害防止
不審なメールの検知
必要な数
- 銀行・証券会社
- 知り合い
- ショッピングサイト
その他
- Webサイトなどの公開用
- 本名でのやり取り
- ニックネーム
- 金銭のやり取りのないサービス登録
- 金銭のやり取りのあるサービス登録
- 登録にメールアドレスが必要だけど,そんなに使っていないメール
メールアドレスの種類
- フリーメール
- プロバイダーメール
- 独自ドメイン
メールアドレスの種類とアフィリエイトにおける3つの使い分け方法 | アフィリエイト
- サービス登録用
- メルマガ購読用(捨てアド)
- メインアドレス
メールアドレスの使い分けかた(前編) - 学習する機械、学習しない人間
メールアドレスの使い分けかた(後編) - 学習する機械、学習しない人間
これらを考えてどういう名前で何個用意するかを考える。
とりあえずメインで使うmainというアドレスを一つ用意する。残りをどうするか。
Webサイト公開用にcontact
- main: メインで使うメール。人に直接教えるときや,お金が絡む場合,ショッピングサイトなど実名が求められるような重要な内容にはこれ。こちらから送信するときもこれ。相手の顔が見えているとき。
- contact:受信専用,公開用。問い合わせ用。なんかフォーラムやブログのコメント欄やcontact usなどにこちらから問い合わせる時なども。相手の顔が見えないときなど。
- service: 基本的に受信専用,たまに返信。Webサービス登録用。
- recruit:就職活動用。就職サイトとか転職エージェント,企業とやりとりするときはけっこうメール来るから。
- job: 個人事業、仕事用、不動産は事業なのでこちら。
- money: 金融機関登録用。銀行、証券会社、クレジットカード会社、決済会社・サービス。
- shop/store: ショッピングサイト、個人間売買サイト。
- ユーザー名: メールアドレスの@以前はユーザー名とみなされることがあるので、ユーザー名のアドレスも用意しておくとよさそうだ。
こちらから送信するときのメールアドレス。
Webサービスに登録するときどうするか。不動産屋さんとか人に教えるときはどうするか。アフィリエイトとかドメインとか実名が求められるときはどうするか。
gmailの+を考える。gmailでは+や.をつけると無限にアドレスをつけられる。ただし,受信は+のないメール。
ただし,gmailの+は使えないときがある。@以前の部分をユーザー名とみなして,+を無効な文字とみなすサービスがある模様。
ネットではがきが印刷~郵送できるポスコミ【1枚から注文OK】
https://www.tomtop.com/もだめ。
今まで使ってきたメールとはどうやりくりするか。
Thunderbirdでやる場合,Archiveするときに既読とメールのコピーを行う。
他のアドレスのメールはmainに転送するようにしておいて,mainのメールアドレスで確認。
最終的にThunderbirdでArchiveを実行したら,宛先のメールのフォルダーに同じ内容が既読状態でコピーされることにする。
このようなフィルターを作っておく。受信時にコピーしてしまうと,未読状態でコピーされてしまうか,受信した瞬間に既読状態になってしまい,見逃す可能性が高い。
Manage Identitiesで返信時に受信したアドレスで返信できるように登録しておく。
Mozilla Thunderbird
Other
Gmailの [すべてのメール] の重複
https://chatgpt.com/share/68917c4b-03f4-800b-9850-7ac5030d399e
いつからか、ThunderbirdのGmailで [すべてのメール] が2個表示されていて、ほぼ同じ内容が同期されている。
IMAPのラベルとフォルダーの関係。内部的にGmailは[Gmail]/All Mailで管理している。
Gmail側では [[Gmail]/&MFkweTBmMG4w4TD8MOs-] みたいな名前で同期されていた。
Thunderbirdの該当フォルダーの[General Information]-[Location]=imap://senoo.ken%40gmail.com@imap.gmail.com/%5BGmail%5D/%26MFkweTBmMG4w4TD8MOs-
重複の解消方法。
- サイドバーのgmailアカウントを右クリック ([File])-[Subscribe] で該当フォルダーのチェックを解除する。
- Gmailで[[Gmail]/&MFkweTBmMG4w4TD8MOs-]のラベル右端…-[ラベルを削除]
これで解消される。
プロファイルの統合
ImportExportToolsでデータ移行するというのが手堅い。一括操作を念頭に置いた機能になっている。数が少ないならば、emlファイルをドラッグドロップで取り込むこともできる。
迷惑メール対策
設定
https://chatgpt.com/share/68047848-7454-800b-9013-a891e572c0d1
迷惑メールに対して、[Junk] ボタンを押すと、学習して勝手に迷惑メールに振り分けてくれる。これを使うのがいい模様。
Thunderbirdでの迷惑メール対策法(Windows) – 神戸大学情報基盤センター
Thunderbirdの迷惑メール対策機能を使うには、設定が必要。
- [Account Settings]-対象アカウント-[Junk Settings]
- [Selection]-[☑️ Enable adaptive junk mail controls for this account]
- [Desitination and Retention]-[☑️ Move new junk messages to]
- ◉ "Junk" folder on:
- ☑️ Automatically delete junk mail older than 14 days
他に全体設定がある。手動でJunkマーク設定時の設定。
- 上記画面の [Global Junk Preferences] ([Settings]-[Privacy & Security]-[Junk])
- ☑️ When I mark messages as junk:
- ◉ Move them to the account's "Junk" folder
- ☑️ Mark messages determined to be Junk as read
- ☑️ When I mark messages as junk:
これで有効になる。
迷惑メール バイバイ!
標準の迷惑メール機能だと、すり抜けるものがある。それをカバーしてくれる模様。
Gmail
未読メール件数
Gmailの未読メール件数をタブに表示させる方法 | ライフハッカー・ジャパン
[設定]-[詳細/Advanced]-[未読メッセージ アイコン/Unread message icon]=[◎ 有効にする/Enabled]
Inboxのカテゴリーがあると、うまく機能しないことがある模様。無効にすると件数表示が正常に機能している模様。
デスクトップ通知
[設定]-[全般/General]-[Desktop notifications]-[◎ メール通知(新規メール) ON/New mail notifications on]
Inboxのカテゴリーの無効化
いつごろからか、Gmailは受信トレイがデフォルトでカテゴリーが有効になっていて、勝手にカテゴリーに振り分けられる。
Promotionとかに受信メールが振り分けられたりしていて、見落とす。
無効にする方法がある。
Gmail で受信トレイのカテゴリを追加または削除する - パソコン - Gmail ヘルプ
[Settings]-[See all settings]-[Inbox]-[Categories] のチェックをすべて外す。
Outlook
通知
Outlook on the web デスクトップ通知の設定と表示時間の変更 #Windows11 - Qiita
2か所で設定が必要。
まずOutlook web版の設定。
[設定]-[全般]-[通知] をオンにする。
続いて、Windowsパソコンの設定。
[設定]-[アクセシビリティ]-[視覚効果]-[この時間が経過したら通知を破棄する]
ここで表示時間を選ぶ。
VBA
Grammar
Variable
変数を宣言する (VBA) | Microsoft Learn
宣言
【VBA】変数を宣言しない場合の挙動(Variant型) | プログラミング勉強メモ
Office TANAKA - 今さら聞けないVBA[変数って宣言しなくちゃいけないの?]
Dim <VariableName> [As <DataType>]
変数宣言しないで変数を使うと、自動的にVariant型で宣言されたとみなされる。
Variant型はメモリーを多く使うので、型宣言したほうがいい。変数名間違いも検知してくれる。
なお、変数の宣言と代入を同時にはできない。分けるしかない。
Option Explicit
[ツール]-[オプション]-[編集]-[☑変数の宣言を強制する] を指定したほうがいい。
Type
| データ型 | 記憶領域サイズ | 範囲 |
|---|---|---|
| Boolean | 2 バイト | True または False |
| Byte | 1 バイト | 0 ~ 255 |
| Collection | 不明 | 不明 |
| Currency (スケーリングされた整数) | 8 バイト | -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 |
| Date | 8 バイト | -657,434 (100 年 1 月 1 日) から 2,958,465 件 (9999 年 12 月 31 日) |
| Decimal | 14 バイト | +/-79,228,162,514,264,337,593,543,950,335 (小数点なし)
+/-7.9228162514264337593543950335 (小数点以下 28 桁) +/-0.0000000000000000000000000001 (0 ではない最小の値) |
| Dictionary | 不明 | 不明 |
| Double (倍精度浮動小数点数) | 8 バイト | -1.79769313486231E308 から -4.94065645841247E-324 (負の値)
4.94065645841247E-324 から 1.79769313486232E308 (正の値) |
| Integer | 2 バイト | -32,768 〜 32,767 |
| Long (Long 整数) | 4 バイト | -2,147, 483,648 〜 2,147, 483,647 |
| LongLong (LongLong 整数) | 8 バイト | -9,223,372,036,854,775,808 から 9,223,372,036,854,775,807
64 ビット プラットフォームでのみ有効。 |
| LongPtr (32 ビット システムでは Long 整数、64 ビット システムでは LongLong 整数) | 32 ビット システムでは 4 バイト
64 ビット システムでは 8 バイト |
-2,147,483,648 から 2,147,483,647 (32 ビット システム)
-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807 (64 ビット システム) |
| Object | 4 バイト | 任意の Object 参照 |
| Single (単精度浮動小数点数) | 4 バイト | -3.402823E38 から -1.401298E-45 (負の値)
1.401298E-45 から 3.402823E38 (正の値) |
| String (可変長) | 10 バイト + 文字列の長さ | 0 〜 約 20 億 |
| 文字列型 (String) (固定長) | 文字列の長さ | 1 〜 約 65,400 |
| Variant (数値) | 16 バイト | 最大で Double の範囲までの任意の数値 |
| バリアント型 (Variant) (文字) | 22 バイト + 文字列長 (64 ビット システムでは 24 バイト) | 可変長 文字列型 と同じ範囲 |
| ユーザー定義 (Type を使用) | 要素に必要な数 | 各要素の範囲は、そのデータ型の範囲と同じです。 |
String
About
リテラル地は以下のいずれかで使用可能。
- 二重引用符
- Chr関数
一重引用符はコメントで使えないので注意する。
空判定
VBAで空白セルを判定する方法 | Excel作業をVBAで効率化
Range.Value = "" Range.Text = ""
上記が無難。他にIsEmpty関数があるが、空文字はtrue扱いになる。
配列
配列と通常変数の違いは、宣言時にサイズの指定が必要な点。Option Base 1で明示的に指定しない限り、0が添え字の始まり。
Dim MyArray(10, 10) As Integer
Dim sngArray() As Single
一括代入
Array 関数 (Visual Basic for Applications) | Microsoft Learn
【VBAの配列】値の一括代入と高速処理 | オフィスのQ&A
Variantを返すArray関数を使うしかない。
Dim str() As Variant
str = Array("りんご", "みかん", "すいか")
結合・追加
Sub test1()
Dim names1 As Variant
Dim names2 As Variant
Dim names3 As Variant
names1 = Array("太郎", "次郎", "三郎")
names2 = Array("四郎", "五郎", "六郎")
'配列の内容を全て文字列として結合した後、分割して一つの配列にする。
names3 = Split(Join(names1, vbCrLf) & vbCrLf & Join(names2, vbCrLf), vbCrLf)
'中身の確認
Dim name As Variant
For Each name In names3
Debug.Print name
Next name
End Sub
Private Function ArrayMerge(array1 As Variant, array2 As Variant)
Dim separator As String
separator = "&"
ArrayMerge = Split(Join(array1, separator) & separator & Join(array2, separator), separator)
End Function
簡単にはできない。Joinでいったん文字列結合して、結合文字でSplitする。要素に結合文字が含まれているとだめなので、結合文字に注意する。
Set
オブジェクト変数 (オブジェクトへの参照を含む変数) の代入・割当時は、Set文が必要。ポインターみたいな扱いだからだろう。mallocみたいな扱いなんだと思う。
オブジェクト式またはNothingを割り当てられる。
Set MyObject = YourObject ' Assign object reference. Set MyObject = Nothing ' Discontinue association.
Newキーワードを使って、宣言と代入を同時にできる。
Set MyObject = New Object ' Create and Assign
関数が実行されている現在のインスタンス参照はMeでできる。this相当。
Statement
If...Then...Else
If...Then...Else ステートメントを使用する (VBA) | Microsoft Learn
1行の場合、End Ifを省略可能。
If myDate < Now Then myDate = Now
Function Bonus(performance, salary)
If performance = 1 Then
Bonus = salary * 0.1
ElseIf performance = 2 Then
Bonus = salary * 0.09
ElseIf performance = 3 Then
Bonus = salary * 0.07
Else
Bonus = 0
End If
End Function
Loop
反復。いくつか気泡がある。
- Do...Loop
- For Each...Next
- For...Next
Do...Loop
Do...Loop ステートメント (VBA) を使用する | Microsoft Learn
Do While myNum > 10
myNum = myNum - 1
counter = counter + 1
Loop
Do
myNum = myNum - 1
counter = counter + 1
Loop While myNum > 10
For Each...Next
For Each...Next ステートメントを使用する (VBA) | Microsoft Learn
Collectionと配列の要素を反復できる。非常に重要。
Sub Add10ToAllCellsInRange()
Dim rng As Range
For Each rng In Range("A1:A10")
rng.Value = rng.Value + 10
Next
End Sub
Sub SetArrayValue()
Dim TestArray(10) As Integer, I As Variant
For Each I In TestArray
TestArray(I) = I
Next I
End Sub
Continue
Continueはない。代わりにGotoでジャンプする。
Public Sub sample()
Dim r As Long
For r = 1 To 10
'■セル値が空白の場合、ループをスキップし、次の行を処理させる(Goto Continue)
If Cells(r, 1) = "" Then
GoTo Continue
End If
Continue:
Next r
End Sub
Break
For文を途中で抜ける(ループを途中で終了させる)【break】【Exit】【ExcelVBA】 | VBA Create
ループの終了はExit。現在のループだけ終了できる。複数終了したい場合、複数必要。または、Gotoで一括ジャンプする。
Exit
Exit ステートメント (VBA) | Microsoft Learn
breakとreturn相当。
以下の書式。
Exit <directive>
Do/For/Function/Property/Subを指定可能。
Do/Forは現在のループを終了するbreak相当。
Funciton/Property/Subは現在の関数を終了するreturn相当。
関数
About
Sub プロシージャと Function プロシージャの呼び出し (VBA) | Microsoft Learn
Function ステートメント (VBA) | Microsoft Learn
【VBA】SubとFunctionの違い【戻り値の有無、参照が可能か、関数として使えるか】
フォームのボタンへの登録可否の都合で、SubとFunctionの2種類がある。
Functionは戻り値があって、ワークシート関数としても使える。Subは戻り値なし。ただし、参照が可能でフォームボタンに登録可能。
動的呼出
- https://grok.com/share/c2hhcmQtMw%3D%3D_e82d24ca-e17f-4fc2-851f-b3a20f50495b
- https://grok.com/share/c2hhcmQtMw%3D%3D_a2024077-9234-42c0-ad6a-8a9867a518c2
関数名の変数や文字列から関数を実行したい時がある。
CallByNameとApplilcation.Runの2種類の方法がある。
- CallByName: メソッドの実行。
- Application.Run: マクロの実行。
マクロにするか、メソッドにする必要がある。
Option
全部の関数、プロシージャーより前に記載必要。
Explicit
Option Explicit ステートメント (VBA) | Microsoft Learn
Option Explicit
変数の定義後使用を強制する。未定義変数アクセス時に例外発生。
変数名間違いなどの防止のため基本的には常につけたほうがいい。
Other
継続行
方法: コード内のステートメントを中断して結合する - Visual Basic | Microsoft Learn
改行位置にアンダースコア_を配置する。直前にはスペースが必要。行末コメントの場合、コメント末尾に必要。
cmd.CommandText = _
"SELECT * FROM Titles JOIN Publishers " _
& "ON Publishers.PubId = Titles.PubID " _
& "WHERE Publishers.State = 'CA'"
複数の文を1行に配置する場合、コロン:で区切る。
text1.Text = "Hello" : text1.BackColor = System.Drawing.Color.Red
Excel
Object
ListObjects
テーブル、構造化参照を取得できる。データ範囲を自動拡張してくれるので楽。
Set lo = ws.ListObjects(ws.Name)
For Each row In lo.Range.Rows()
テーブル名で取得する。
Cell
範囲有無判定
Range.Find メソッド (Excel) | Microsoft Learn
Range.Find関数を使うのがエレガント。
見つからなければ、Nothingを返すのでIs Nothingで判定すればいい。
If ThisWorkbook.Sheets("マスタ").Range("D1:D8").Find(row.Cells(2).Value, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then GoTo NextRow
LookIn/LookAt/SearchOrder/MatchByteは保存されるので注意する。
Value/Text
セルの値の参照方法がいくつかある。
Range.Value
Range.Text
ファイル出力などする際は、Range.Textがいい。Valueだと例えば、日時データは00:00だと時刻部分が省略される。
Color
VBA セルに色を設定する (Interior.Color, ColorIndex)
- 文字色: Range.Font.Color/Cells.Font.Color
- 背景色: Interior.Color
色はRGB関数で指定する。
Clear
セルのクリア(Clear,ClearContents)|VBA入門
Range (Cells, Rows, Columns, Range) に削除用のメソッドがある。
| メソッド | 説明 |
| Clear | 全体(数式・文字・書式・コメント全て)をクリアします。 |
| ClearComments | コメントを消去します。 |
| ClearContents | 数式と文字を削除します。 |
| ClearFormats | 書式設定を削除します。 |
| ClearNotes | コメントを削除します。 |
| ClearOutline | アウトラインを消去します。 |
| ClearHyperlinks | 2010以降のみ、ハイパーリンクを削除します。 |
Range.Text = ""だとうまくいかないことがある。たぶんValueかClearContentsがいいと思う。
イベント
Worksheet.Changeイベント
- Worksheet.Change イベント (Excel) | Microsoft Learn
- VBAでセルの値が変更時に処理を行う(Worksheet_Change) | Excel作業をVBAで効率化
セルの値の変更時に、処理が可能。
VBA画面で該当シート-[Worksheet]-[Change] を選ぶ。
Private Sub Worksheet_Change(ByVal Target As Range) End Sub
Target: 変更された範囲が渡される。
Other
開発タブ
デフォルトではVBAの開発UIが非表示になっている。
[ファイル]-[オプション]-[リボンのユーザー設定] から [☑開発] を選ぶ。
置換モード
エクセルVBAのエディターが上書きモードになる理由は? - ネットトラブルポータル
Insertキーを押すと上書きモードになる。注意する。
セル範囲をループ
セル範囲の各セルをループで操作する | Microsoft Learn
現在日時
VBAで今日の日付と現在時刻を取得する(Date、Time、Now) | Excel作業をVBAで効率化
Date()/Time()/Now()関数でDateオブジェクトを取得できる。これをFormat関数で書式化して使う。
Format(Now(), "yyyy年mm月dd日 hh時mm分ss秒")
Debug.Print
VBAでのデバッグはDebug.Printの出力をイミディエイトウィンドウに表示させて確認するのが基本。
【ExcelVBA入門】最初に覚えると幸せになれるDebug.Printの使い方! | 侍エンジニアブログ
オブジェクト変数またはWithブロック変数が設定されていません。
VBA エラー 91「オブジェクト変数またはWithブロック変数が設定されていません。」の原因と対処方法 - エク短|Extan.jp
Sub エラーテスト1R()
Dim objRG As Range
Set objRG = Range("A1:B10")
End Sub
インスタンス変数代入時はSetが必要とか。
マクロブロックの解除
潜在的に危険なマクロがブロックされました - Microsoft サポート
ファイル-[プロパティー]-[☑ブロックを解除]
