VBA-マクロのパスワード解除とは?(VBAProjectパスワードのこと) マクロのパスワード解除とは、「VBAProject パスワード」の解除って意味ですね。

マクロを扱う全ての方に! Excelマクロ管理ツールでできること ・マクロをツール内のデータベース(以下、データベース)に記録し管理する ・特定のワードでデータベースを検索し該当するマクロを抽出する ・アクティブブックのマクロをデータベースに一括で取り込む ・データベースに記録してあるマクロをアクティブブックのモジュールに追加する ・データベースのデータを専用ファイルとしてエクスポートする ・専用ファイルをデータベースにインポートする ・ツール専用Webサイトから任意のマクロをデータベースにインポートする ・データベースのバックアップファイルを作成しデータを復元できるようにする 他 ※ VBAのコード全般を便宜上マクロと呼んでいます ver.1.0.2 ダウンロード Excelマクロ管理ツールで解決したいこと こんにちは。坂江(@SakaeTamotu)です。 Excelを使用している方の
サイト全体の更新情報・お知らせ 2025/05/29 4択クイズを作成しました。 エクセル入門 4択クイズ VBA入門 4択クイズ 生成AIパスポート試験 練習問題(四股択一式) 2025/04/24 「生成AI活用研究」を開始しました。 生成AIの近年の凄まじい進歩についていけるように新シリーズを開始! 「生成AI全般」「プロンプトエンジニアリング」「エクセル数式対決」「Geminiと100本ノック」 2022/10/24 LAMBDA関数と6つのヘルパー関数の解説を追加しました。 さらに、配列を便利に扱える関数等も多数追加されましたので、これらの関数の解説も追加しています。 LAMBDA以降に追加された関数 , LAMBDA以降の新関数の問題集 2022/09/26 数式を入力したセルから結果があふれて隣接したセルにも出力される新機能のスピル。 スピルの基礎から応用までのスピル問題集を
仕事に活用できるOfficeの使い方をご紹介。 すぐに役立つWordやExcel、PowerPointの基本操作やコツ、テクニックをお届けします。 オートフィルによって連続データを入力する操作について、ショートカット キーでやる方法はありませんか?とよく聞かれます。 オートフィルは、アクティブ セルのフィルハンドルにマウス ポインターを合わせてドラッグすることで、セルのコピーや連続データの入力が行える機能のこと。これです↓ 連続データの入力に「ショートカット キー」の割り当てはないのですが、「アクセス キー」を使って操作することは可能です。 リボンに配置されているタブやコマンドに割り当てられているキーを順番に送信しているので「アクセス キー」のほうが正しいです。 たぶん、やりたいことができるのなら、どちらでもいいんでしょうけどね^_^; Excel 2007 以降のバージョンでは下記のいず
構文 IsNumeric(expression) 引数expresionには、数式または文字列式を含むバリアント型の式を指定します。 解説 引数expresionが、数値として認識できる場合はTrueを返します。それ以外はFalseを返します。 IsNumeric関数は、引数expresionが日付式の場合はFalseを返します。 サンプル 次の例は、ユーザーが入力した値が数値かどうか判定します。 Sub Sample() Dim a As Variant a = InputBox("数値または文字を入力してください") If IsNumeric(a) Then MsgBox a & "は数値です" Else MsgBox a & "は文字です" End If End Sub
これだけはおさえるセル操作(2)-Resizeで自由自在 (Excel 97/2000/2002/2003/2007/2010/2013/2016) ツイート セル(範囲)に関する基本事項で、RangeとCellsをマスターしたら、Offsetプロパティと一緒に、ぜひResizeプロパティの使い方をマスターしてください。 【基礎編】 Resizeプロパティはセル操作の重要基本テクニックの1つです。その名のとおり、リサイズ(セル範囲のサイズ変更)を行い、サイズ変更した後のセル範囲を返します。使い方は次のとおりです。 Rangeオブジェクト.Resize(変更後の行数, 変更後の列数) Offsetプロパティが現在の位置と移動後の位置との差分を引数で渡すのに対し、Resizeプロパティは差分ではなく変更後の行数・列数を渡します。 選択範囲を行・列ともに1ずつ拡張する場合は、次のように記述します
条件に当てはまるセルを検索する(Find/FindNext/FindPreviousメソッド) (Excel 2000/2002/2003/2007/2010/2013/2016) ツイート セル範囲の中から指定した条件に当てはまるセルを検索します。条件に当てはまるセルが複数ある場合に、見つかったセルの次のセルを検索するのにFindNextメソッドとFindPreviousメソッドを使用します。 引数がたくさんありますが、[検索と置換]ダイアログボックスでセルを検索するときに指定する内容とほぼ同じです。なお、条件に当てはまるセルが存在しない場合には、Nothingを返します。 構文 Object.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat
VBAでは画面描画を停止すると実行が早くなることは広く知られているが、実はあと2つ、設定すると有効なオプションがある。 手動計算と、イベントの抑制だ。 それぞれ、次のようにして設定する。 Application.ScreenUpdating = False '描画停止 Application.EnableEvents = False 'イベント抑制 Application.Calculation = xlCalculationManual '手動計算 With文で一度に設定しても良い。 With Application .ScreenUpdating = False .EnableEvents = False .Calculation = xlCalculationManual End With 設定を解除するには次のようにする。 With Application .ScreenUpdat
リストボックスで複数の項目を選択可能にするには、リストボックスのMultiSelectプロパティを設定します。標準では「fmMultiSelectSingle」が設定されています。 fmMultiSelectSingle fmMultiSelectMulti fmMultiSelectExtended 標準のfmMultiSelectSingleは、単一選択です。fmMultiSelectMultiまたはfmMultiSelectExtendedを設定すると、複数の項目を選択可能になります。両者は複数の項目を選択する方法が異なります。 【fmMultiSelectMulti】 項目をクリックすると選択できます 別の項目を選択するときもクリックだけです CtrlキーやShiftキーは必要ありません すでに選択している項目を再度クリックすると 選択状態が解除されます 【fmMultiSelec
シート名の一覧を抽出する方法をご紹介します。 ■方法1:名前の定義を使う 「数式」タブ-「名前の定義」をクリック 適当な名前を入力し(例 sName)「参照範囲」に=GET.WORKBOOK(1)と入力して「OK」 シート名を出したいセルに次の数式を入力し、オートフィルする =REPLACE(INDEX(sName,ROW(A1)),1,FIND("]",INDEX(sName,ROW(A1))),"") 補足:get.workbook(1)ではシート名の一覧を取得できます。名前の定義後、=名前を入力すると[ファイル名]シート名が表示されます。 INDEX関数でシート名一覧から○行目…を指定することで1番目のシート、2番目のシート…のように取得できます。○行目はROW(a1)…で指定します。 ■ 方法2:VBA画面に表示(簡単) ALT+F11キーを押す CTRL+Gキーを押して下部に「イ
これは基本的なテクニックだと思って今まで解説しませんでしたが、セミナーなどで質問が多かったので、簡単に書いておきます。たとえば、下図のようなリストがあったとします。 この、現在入力されている最終セル(あるいは最終行)を取得するには、どうしたらいいでしょう。 Excelに詳しくない、VBAのプログラミング的なことしか知らないような方でしたら、次のように考えるかもしれませんね。「A列を上から順番に見ていって、空欄セルが見つかったら、その直前が最終セル」だと。その方法でやってみましょうか。 Sub Sample1() Dim i As Long, r As Long For i = 1 To 10000 Range("A" & i).Select If Selection = "" Then r = i - 1 Exit For End If Next i Range("A" & r).Sele
昔、本項で比較したかったのは、要するに「For Next と For Each って、どっちが速いの?」ってことです。1995年にMicrosoftから出版されたVBAに関する公式本に「For Each の方が速いよ~理由はね~」って書いてあったからです。その頃調べた結果では、確かに For Each の方が速かったです。でも、時代は変わりました。と同時に、パソコンの性能も飛躍的に向上しています。理論的に速くても、体感速度として、あるいは計測結果としては、どうなんでしょう。 まず、For Next と For Each で比較してみましょう。 Sub Test1() Dim i As Long For i = 1 To 10000 Cells(i, 1) = 100 Next i End Sub Sub Test2() Dim c As Range For Each c In Range(
Dictionaryオブジェクトを利用する方法を書いていますが、理解不足で間違った説明をしているかもしれません。 Dictionaryオブジェクトはデータ キーと組みとなる項目を格納するオブジェクト。 項目は重複しないキーで関連付けられる。キーは各項目を取得するのに使用され、通常、整数型か文字列型。 Dictionaryオブジェクトを作成する topへ 下表の品名と単価をmyDicに格納して、D列の品名に応じた単価をE列に返します。 なお、この例ではA列の品名は重複していないデータです。 CreateObject関数で、Dictionaryオブジェクト[myDic]を生成します。 Addメソッド[object.Add key, item] でKey[品名(A2)],Item[単価(B2)]を順次格納します。 Itemプロパティ【object.Item(key)[ = newitem]】
ワークシートの最終セル(最終行、最終列)を取得する… VBAをはじめた人は誰しも最初に引っかかる問題ではありますが、幸いにもインターネットで検索するといくつもの解決法が見つかります。 ところが…動いたり動かなかったり、想定外の動作をすることがあります。そもそもいくつもの解決法があること自体おかしい、いったい本当の答えはどれ?この際、白黒はっきりさせようじゃないかというのがこのページの趣旨です。 <S1> ワークシートの最大行、最大列を取得する MaxRow = Rows.Count MaxCol = Columns.Count まず基本からですが、ワークシートの最大行、最大列を取得するコードです。もちろんこれ自体は最終行、最終列を取得するものではありません。 Rowsはワークシートの行全体をあらわすオブジェクトで、Columnsは列全体をあらわすオブジェクトです。そのメソッドCountは数
Excel VBAでハッシュを使う方法のまとめです。 1.はじめに Excel VBAではハッシュテーブル(連想配列)を使うことができます。 で、ネットで検索してもパッとみて分かるようなサンプルがなかったので、できるだけ無駄なものを省いたサンプルを使って本エントリーで説明してみたいと思います。 2.サンプル まずはざっくりしたサンプルから紹介します。 Sub test() Dim obj As Object Set obj = CreateObject("Scripting.Dictionary") obj.Add "foo", 100 obj.Add "bar", 200 obj.Add "hoge", 300 Dim key As Variant For Each key In obj MsgBox obj(key) Next key Set obj = Nothing End Sub
Add2メソッドについて(2019年1月 追記) 2018年10月18日にExcel 2016は機能拡張されて、バージョン1810(ビルド 11001.20074)になりました。このとき実装された機能拡張のひとつに、"新しいデータ型"があります。追加されたのは「株式型」と「地理型」です。両者の型に関しては、下記Microsoftのページをご覧ください。 Excel データ型: 株価と地理 この「株式型」と「地理型」の追加に伴って、セルの並べ替えで条件を指定するSortFieldsコレクションに、新しくAdd2メソッドが追加されました。ちなみに、いままではAddメソッドでした。両者の働きに大きな違いはありませんが、Add2メソッドは、新しい「株式型」と「地理型」のサブフィールドを並べ替えることが可能です。Add2メソッドをヘルプで調べると、次のように記載されています。 この API には、地
引数varnameにユーザー定義型を指定することはできません。 サンプル 次の例は、バリアント型変数の内部処理形式を表示します。 Sub Sample() Dim var As Variant var = "ABC" MsgBox VarType(var) '8を表示します var = 123 MsgBox VarType(var) '2を表示します var = 123.456 MsgBox VarType(var) '5を表示します var = Array("A", "B", "C") MsgBox VarType(var) '8204を表示します End Sub
VBA でシステムを作ったとき、機能をメニューから選択できると便利ですね。独自のメニューをメニューバーに登録する方法をご紹介しましょう。 Sub AddMenu() Dim NewM As Variant, NewC As Variant ''新しいメニューを追加する Set NewM = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup) NewM.Caption = "新しいメニュー(&C)" ''オリジナルコマンドを追加する(1) Set NewC = NewM.Controls.Add With NewC .Caption = "保護解除(&U)" .OnAction = "UnProtectSheet" .BeginGroup = False .FaceId = 277
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く