今回は、
・Selectionで、選択範囲を参照する
・ActiveCellとSelectionの違い
・処理のタイミングについて
そんなお話です。
<Excel Selectionプロパティで選択範囲を処理する>
どうも、三流プログラマーのKen3です。 今回は、 メールでもらった質問、 現在選択中のセルについて、探ってみます。 いつものように、たいした解説、回答内容じゃないので、 暇つぶしに休み時間などに拾い読みしてください。/* * 1.今回のキッカケ */
メールで下記の質問をもらいました。 ---- >エクセルで範囲を指定したところだけマクロを実行するにはどうすれば良いのですが >? >最近はMMの量(発行量)が多すぎて読むのに苦労しています。 >お手数ですがご教授をお願いします。---- ---- メルマガの量が多いのかぁ・・一回一回が薄いので、回数でカバーしてるんだけど、 回数が多いとうんざりする、そんな女性もいたりしてね(なんの話だよ・・?) たしかに、連続発行すると解除者が増えるんだよなぁ。 遠距離恋愛で2・3ヶ月に一度は困るけど、 毎日もうざい、そんな感じなんだろうなぁ? 会話でネタがツキナイヨウニいつも新鮮な話題を提供しないと。 ご教授?そんなレベルじゃないけど、今回も回答します。 ハヤク始めろって? いつもの前置き(前○)が長かったですね(謎?)/* * 2.プログラムの中でタイミングを取れると楽 */
範囲指定した部分だけマクロの実行。 一番簡単なのは、プログラムの中でタイミングを取れると楽ですよね。 タイミングを取る? イベント起動型のプログラムとはいっても、 ~~~~~~~~~~~~~~~~~~~~~~~~~~ 個々のプログラムは上から下へ、 分岐したり、ループしたり、途中で抜ける、エラー処理に飛ぶ、 と プログラムを組んでます。 簡単なのは、範囲指定をプログラム中に組み込んでしまう方法。 No.102 Excel 範囲を選択して、カンマ区切りのファイルを作る http://www.ken3.org/backno/backno_vba21.html#102 で、作りかけなんだけど(最後まで出さないと体に悪いのに・・・?) プログラムの頭で(頭のタイミングで)、 Dim objTARGET As Range '選択されたセルの集合 Set objTARGET = Application.InputBox(prompt:="セルを選択", Type:=8) と、 Application.InputBox(prompt:="セルを選択", Type:=8) を使用して、セル範囲を選択させる。 で、 選択された範囲を 'テーブルデータを作成する Call MAKE_CSV_FILE(strFNAME, objTARGET) と、関数へ渡す。 For y = 1 To objHANI.Rows.Count '行のループ For x = 1 To objHANI.Columns.Count '列のループ で、ループを作り、データの書き出しを行っています。 処理の流れは簡単で、 1.プログラム Sub Mainが起動される 2.Application.InputBoxでセルを選択させる 3.選択範囲に対して、処理を行う と、ワンセットになってます。
Sub Main() 'Application.InputBoxでセルを選択させる Dim objTARGET As Range '選択されたセルの集合 Set objTARGET = Application.InputBox(prompt:="セルを選択", Type:=8) If IsEmpty(objTARGET) Then 'キャンセルが押されたかチェックする MsgBox "キャンセルが押されました" Exit Sub End If 'ファイル名を作成 ファイル名は自分のパス+\test.html Dim strFNAME As String 'ファイル名保存用 strFNAME = ThisWorkbook.Path & "\test.csv" 'ファイル名を作る 'テーブルデータを作成する Call MAKE_CSV_FILE(strFNAME, objTARGET) 'できたファイルをメモ帳で表示して確認する Shell "notepad.exe " & strFNAME '手抜きでShellで起動 '終わりの挨拶 MsgBox strFNAME & "を作成しました" End Sub |
Sub MAKE_CSV_FILE(strFNAME As String, objHANI As Range) 'ファイルをオープンする Dim FNO As Integer 'ファイル番号 FNO = FreeFile '空いてるファイル番号を取出す Open strFNAME For Output As #FNO 'テキストファイルを新規作成 '行、列でループを作る Dim y As Integer Dim x As Integer For y = 1 To objHANI.Rows.Count '行のループ For x = 1 To objHANI.Columns.Count '列のループ Print #FNO, objHANI.Cells(y, x).Value; Print #FNO, ","; Next x Print #FNO, "" '改行のみ出力 Next y 'ファイルをクローズする Close #FNO End Sub |
Sub ボタン1_Click() Selection.Font.Bold = True End Sub |
Sub ボタン1_Click() MsgBox "ActiveCell.Addressは、" & ActiveCell.Address MsgBox "Selection.Addressは、" & Selection.Address End Sub |
Sub ボタン1_Click() '選択範囲がRange型かチェックする 'グラフを選択されていたりするのを防止したかったため If TypeName(Selection) <> "Range" Then MsgBox "変なとこ触るなよ、セルを選択してよ" Exit Sub 'Range以外は抜ける End If 'テストで範囲の表示 MsgBox "選択範囲は、" & Selection.Address 'ループさせて処理を行う Dim objRANGE As Range For Each objRANGE In Selection.Cells If objRANGE.Value < 100 Then '数値が100以下なら objRANGE.Font.Color = RGB(&HFF, 0, 0) '赤にする Else objRANGE.Font.Color = RGB(0, 0, &HFF) '青にする End If Next End Sub |
三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。
開発時によく使う操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] | |
項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。 Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など Blog:[三流君の作業日記]/
[サンプルコードのゴミ箱]/
広告-[通販人気商品の足跡] |
三流プログラマーのKen3 が 皆さんの質問にお答えします
と カッコつけて言っても、実力不足ですべての質問に回答することはできないのが現実なのですが、できる範囲で 三流的な逃げ手 や 解決方法 を探します(回答します)。
感想や質問・要望・苦情など 三流君へメッセージを送る。 時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。 |
急ぎで連絡がほしい、そんな時は:[三流君連絡先]に連絡してください。