• ベストアンサー

エクセルについて質問です。

選択範囲内の空白セル全てに同じ文字を入力するマクロを教えていただけるとありがたいです。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1623/2463)
回答No.1

Sub Example() Dim c As Range For Each c In Selection If c.Value = "" Then c.Value = "同じ文字" End If Next End Sub でいかがでしょう。

yoshimitsu525
質問者

お礼

回答ありがとうございます。助かりました。

その他の回答 (3)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

こんにちは。お邪魔します。 ちょっと気になることが幾つかあったので、 少し保守寄りのサンプルを一例挙げておきます。 空白セル、というと、数式や定数値が設定されていない 「空のセル」を指しますから、普通は .Value プロパティではなく、.Formula プロパティを使って、 空白かどうかの判断をします。 これは、=IF(A1<>0,B1/A1,"")のような、よく見かける数式が 設定されたセルで、戻り値が、""であった場合等に、 この数式を書換えてしまうことを避ける意味があります。 「値が空のセル」のような表現であれば、.Value プロパティを使って、 戻り値が""である数式セルを含める、ということになります。 ご質問の意図がどちらであるか判断付きませんが、 こういう違いを意識することを大事にして欲しいです。 InputBox()関数とInputBox メソッドと、似て非なる対話型UIが用意されていますが、 特別選ぶ理由が無い場合は、メソッドを使うことが近年推奨されているようです。 どちらの場合でも、  キャンセルされた場合  何も入力されなかった場合 は、処理を中止するなど、ハッキリと処理を分けるように書くのが基本です。 結合セルについては、 値や数式を設定できるのは、結合セル範囲内の左上のひとつのセルだけです。 For Each ループでセル範囲を総当たりで処理する場合、 「結合範囲内の左上以外のセル」については、値を設定しようとしても、 結果的に無視されることになり無駄になります。 また、For Each ループでは指定した範囲を左上から順番にセルひとつずつ 処理対象にしますから、   If c.MergeArea(1).Formula = "" Then のように書いて置けば、無駄な処理をしないで済みます。 大きな結合セルが多数ある場合などでは、処理速度にも違いは出るでしょう。 結合セルが無い、または、少ない、小さい、とハッキリとした前提があるなら、   If c.Formula = "" Then のように省略した方がスッキリ書けますし、寧ろ余計なことをせずに済みます。 ここら辺は、運用とか応用とかいったレベルで、 手にしたサンプルをユーザーさんが書き換えるであろう範疇です。 もしも、セル範囲以外(グラフ等)を選択中だと Selection はセル範囲ではありませんから、エラーになります。 エラーを避ける方法は幾つかありますが、   If TypeName(Selection) <> "Range" Then こんな風に処理を中止するように書いて置くのが比較的簡単で一般的です。 こういうのは初級からそろそろ中級といった課程で考えればいいことかも知れませんが、 まぁ、日頃からなるべくエラーを回避できるように書いておきたいですよね、と。 Const 置換候補初期値 = "空白" の部分はInputBoxに最初に表示しておく値を指定しておきます。 適宜書き換えてください。 固定の値を指定したいとか、頻度の高い値を指定したいとか、 入力を誘導するように Const 置換候補初期値 = "ココに値を入力してください" みたいな使い方もありです。 初期値を指定したくない場合は、 Const 置換候補初期値 = "" です。 難しく考え過ぎてもいけませんが、 何が必要で、どこまでやれば十分か、選んで 書き換えたり書き加えたり消したり、できるように頑張ってください。 以下、一例です。 ' ' ==== 標準モジュール専用 === Sub Re8758270c() Const 置換候補初期値 = "空白" ' 空白を埋める値の候補として最初に表示する値を指定 Dim v ' 空白を埋める値 Dim c As Range ' セル範囲総当たりに使うRange型変数 Dim cn As Long ' 空白セルが見つかった数をカウント   ' ' もしも、セル範囲以外(グラフ等)を選択中だとエラーになるので   ' ' 注意をした上で、処理中止   If TypeName(Selection) <> "Range" Then     MsgBox "マクロ実行出来ません。セル範囲を選択してからやり直して下さい。", vbExclamation     Exit Sub   End If   ' ' InputBox メソッドで値を指定します。   ' ' 数式文字列、数値、文字列値、論理値、日付値、時刻値、パーセンテージ値、指数値、   ' ' 以上の型で入力可。   ' ' 通値貨、会計値、分数値、以上の型は入力不可。   v = Application.InputBox( _       Prompt:="【空白セルすべて】に設定する値を指定して[OK]", _       Title:="空白を埋めよう", _       Default:=置換候補初期値, _       Type:=2)   ' ' InputBox メソッドがキャンセルされた場合、何も入力されていない場合、処理中止   If VarType(v) = vbBoolean Or v = "" Then     MsgBox "キャンセル", vbInformation     Exit Sub   End If   ' ' 選択中のセル範囲総当たり   For Each c In Selection     ' ' 各セル(結合セルだった場合は結合セル範囲内の左上のセルだけを対象に)     ' ' に数式や定数値が設定されていない="空白セル"である=場合     If c.MergeArea(1).Formula = "" Then       ' ' 上記条件判別に該当したセルの値を指定した値に設定する       c.Value = v       ' ' 空白セルが見つかった数をカウント       cn = cn + 1     End If   Next   If cn > 0 Then ' 空白セルが見つかった場合のメッセージ     MsgBox "空白セル " & cn & "ヶ所、に値:" & v & " を設定しました", vbInformation   Else ' 空白セルが見つからなかった場合のメッセージ     MsgBox "選択中の範囲に空白セルは見つかりません", vbInformation   End If End Sub

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.3

例えば、 Sub InsTxt()  Dim txt  Dim cel  txt = InputBox("文字")  For Each cel In Selection   If cel.Value = "" Then cel.Value = txt  Next End Sub な感じとか。

yoshimitsu525
質問者

お礼

回答ありがとうございます。参考になりました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 色々やり方はあると思いますが、一例です。 Sub Sample1() Dim str As String, c As Range str = InputBox("表示させたい文字を入力") For Each c In Selection If c = "" Then c = str End If Next c End Sub こんな感じではどうでしょうか?m(_ _)m

yoshimitsu525
質問者

お礼

回答ありがとうございます。やってみます。

関連するQ&A

  • エクセルについての質問です。

    エクセルについての質問です。 マクロを作成しましたが、セルの結合のマクロの場合、 マクロ実行の際に、 <選択範囲には複数のデータ値があります。 一つのセルとして結合すると、選択したセル範囲にある もっとも上端にあるデータのみが保持されます。空白セルは 無視されます> という警告が出てしまいます。 でないようにしたいのですが、 可能ですか?

  • Excel(セルの結合マクロ)

    いつもお世話になっております。 Excelのマクロで、選択範囲の中で、下のセルが空白のものは、上のセルと結合されるマクロを作りたいと考えています。 (例1:A1セルに”TEST”が入力されており、A2,A3セルが空白として、A1:A3を選択し、マクロを実行するとA1からA3がセル結合される  例2:A1に”TEST2”B2に"TEST3"が入力されており、A1:B3を選択すると、A1からA3が結合され、B2とB3も結合される) 説明が下手で申し訳ないのですが、お力を貸していただけませんでしょうか? よろしくお願いいたします。

  • エクセルのオートフィルターをマクロで記録

    エクセルのマクロ記録でオートフィルター機能を記録したのですが フィルターのボタンを押して各項目を選択するのに (すべて) (トップテン) (オプション) (空白セル) (空白以外のセル)があるのですが (空白セル)を選択すると , Criteria1:"=" (空白以外のセル)だと , Criteria1:"<>" のようにマクロ記録されます (すべて)を選択した場合 , Criteria1:が記録されないのですが これをあえて構文として書くと、どのようになるのでしょう 他のマクロで引用したいので困っています よろしくお願いいたします

  • エクセル2003を利用しています。

    エクセル2003を利用しています。 ジャンプ機能の基本的なことなんですが教えてください。  新規作成したシートで未入力の複数セルを範囲選択し、ジャンプ機能で「空白セル」を選ぶと「該当セルが見つかりません」となります。範囲選択したセル全部が空白セルとして認識されるだろうと思ったのですが、なぜなのでしょうか?

  • 作業したいセルにすぐカーソルをもっていく方法

    こんばんは。 セルの移動について教えてください。 1.Excelで自分が作業しているセルから、指定したセルに すぐカーソルがいくような何かよい方法はありませんか? たとえば、C3のセルからA1にもどりたければCtrl+Homeで 戻ることはわかったのですが。。。 C3からすぐにP9のセルにダイレクトでカーソルをうごかしたい、 といったときです。 2.VBA初心者のため自動マクロでプログラムを作成し、   それをいじって作業しています。   文字列がはいってる対象のセルの範囲をすべて削除したく   対象の最初のセルを選択し、Ctrl+Shift+↓+→   でやってみたところ、実は途中に空白セルがあり、   すべての文字列がはいっている範囲が選択できませんでした。   今は手でセルの範囲を指定していますが、セルの範囲が広がる   可能性もあり、できればCtrl+Shift+↓+→のような   方法でセル範囲を指定したいのです。   たとえば、A3からD20までの範囲を選択したいとします。   A行には空白行があります。そのためA3を選択後   上記Ctrl+Shift+↓+→をおこなうと、Dの途中の列で   選択が終わってしまいます。      ですが、B列はすべて空白ではない列となっています。   その空白ではないこのB列のまず行を数えて、   それからA列からD列までの上記で数えた行分選択   するといった方法でプログラムすれば、セルの範囲   が広がったあとでも対応するのでしょうか? わかりづらくて申し訳ありません。 VBAは本当に自動マクロをいじるくらいしかできないので、 超初心者にわかりやすく教えていただけたら幸いです。 よろしくお願いいたします。

  • EXCEL 指定範囲内の空白セルに特定数だけ文字を入力するマクロ教えてください。 

    マクロ初心者です。 指定範囲内の空白セルに特定数だけ文字を入力するマクロを考えていますが、まったくわかりません。どなたか教えていただけますか? 詳細内容 (1)下記のような空白セルを含む範囲内        A B C D       1  A君       2       3A君  B君       4  C君  (2)別セルでA君に1追加するとA君が表示上追加される        A B C D       1  A君  A君←どこでも空白セルならいい       2       3A君  B君       4  C君 

  • エクセルの質問です。

    エクセルの質問です。 エクセルである箇所を入力規則で縛りを入れているのですが、どこからかセルをコピーして入力規則以外の文字を入力されてしまいます。 シートの保護をしてしまうと、入力規則での選択が不可となってしまいます・・・。 入力規則だけは選択できて、コピーなどは出来ないように制御をかけたいのですが良い方法はありませんか? なお、できればマクロは使いたくありません・・・。 是非、よい方法をご教授ください。

  • エクセルのマクロで条件によって中断させる方法

    例えば、A1のセルが空欄の場合は、マクロを終了して、文字列や数値などのデータが入力されている場合はマクロを実行(例えば範囲選択して合計を算出するなど)するマクロの書き方がわかりません。お願いします。

  • Excelで決まった文字以外を一括削除。

    勤務表を作成しています。 赤いセル「/。」は、希望休です。 勤務表の組み直しを行うため、希望休以外を一括で削除して空白にしたいのですが、そのようなマクロを組む事はできますか? 入力してある文字「/。」で判別して、それ以外に入力してある文字を削除できるようにしたいです。 J5:AN13の範囲だけを対象範囲にして削除したいです。 この範囲以外は、スタッフ氏名や行事などの入力がされていますので消したくないです。

  • マクロを使って範囲選択したい

     エクセルのセルにランダムに入力されたデータについて、データが入力されたセル(データが入っていない空白部分も含めて)全てを範囲選択したいのですが、マクロを利用してできますでしょうか。  その後、コピーペーストする予定なのですが、シート全体を選択する方法は駄目です。あと、空白セルも存在するので、入力された1つのセルを選択して、ctrl+Shift+*も駄目です。  もともとのデータは、OCRソフトで読み込こんだデータをエクセルにしたものなので、基本ぐちゃぐちゃにデータが入力された状態になっています。  わかりずらい質問かもしれませんが、回答願います。

専門家に質問してみよう