• ベストアンサー

マクロ A1のセルの値を見て、B1に値を入力したい。

エクセルのマクロでA1の値が1ならばB1にaを、2・3・4ならばbを、5ならばCを、それ以外は「該当無し」と入れたいのですが下のマクロではうまく行きません。ぜひご指導ください。 Sub If Left(Cells(1, 1).Value, 1) = 1 Then Cells(2,1).Text = "a" ElseIf Left(Cells(1,1).Value, 1) = 2 Or _ Left(Cells(1,1).Value, 1) = 3 Or _ Left(Cells(1,1).Value, 1) = 4 Then Cells(2,1).Text = "b" ElseIf Left(Cells(z, 37).Value, 1) = 5 Then Cells(2,1).Text = "c" Else: Cells(z, 40).Text = "該当無し" End If End Sub

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

入力ミスなのか、いくつもエラーがあります。 >A1の値が1ならばB1にaを、2・3・4ならばbを、5ならばCを、 ということの作業であれば Select Case文を勉強してみてください。 Sub Macro1() Select Case Left(Cells(1, 1).Value, 1) Case 1 Cells(2, 1).Value = "a" Case 2, 3, 4 Cells(2, 1).Value = "b" Case 5 Cells(2, 1).Value = "c" Case Else Cells(2, 1).Value = "該当無し" End Select End Sub といった具合にシンプルになります。

matchy4649
質問者

お礼

ありがとうございました。出来ました!

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

VBのElseIfの勉強でなければ、 VBAの上達度は、私の持論では、IF文をどれだけ減らせたかにあると思っている。 コードか簡潔になる。 見通しがよくなる。 エラーが少なくなる。 (VBでなく)VBAを生かせる。 などのメリットがある。 そのためにはエクセルそのものの機能の勉強が先だが。 ーー 本件は、Case文もあるが F1:G5に 1 a 2 b 3 b 4 b 5 c を作って コード例として Sub test05() On Error GoTo err1 For i = 1 To 5 Cells(i, "B") = WorksheetFunction.VLookup(Cells(i, "A"), Range("F1:G5"), 2, False) Next i Exit Sub err1: Cells(i, "B") = "該当なし" Resume Next End Sub なんてのもある。 >質問コードのLeftは文字列の一部を判別するのか?無視したが。 ーー 対応表をプログラムのコードの中に持つ手もある。

matchy4649
質問者

お礼

For Nextを使用することも出来るのですね。ありがとうございました!

matchy4649
質問者

補足

>質問コードのLeftは文字列の一部を判別するのか?無視したが。 説明部位側でした。申し訳ありません。そうです。 A1のセルの文字の一番最初の文字を判別しようとしていました。

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.1

Sub TEST()   Select Case Cells(1, 1)   Case 1     Cells(1, 2) = "a"   Case 2, 3, 4     Cells(1, 2) = "b"   Case 5     Cells(1, 2) = "c"   Case Else     Cells(1, 2) = "該当なし"   End Select End Sub ------------------------------- で、どうでしょう

matchy4649
質問者

お礼

Select Caseを使ったら簡単で分かりやすいですね。ありがとうございます!

関連するQ&A

  • エクセルマクロ セル内の値の抜き出しと入力の値との

    すみません、ハマっております。 下記マクロにて、A2セル内にある(例)「111-22222-5555-666-1」の中のと入力した5555とのマッチングのマクロを作っているのですが、どうしてもA2値がemptyになってしまいうまくマッチングできません。どうしたらよいでしょうか?お力お貸しください。 Private Sub CommandButton1_Click() Unload 番号入力 Dim OdrNum As String If TextBox1.Value = "" Then Exit Sub Else OdrNum = TextBox1.Value While Mid(A2, 11, 4) <> OdrNum '該当番号の欄になるまで不要行削除 If Mid(A2, 11, 4) = "" Then MsgBox "該当番号はありませんでした。" Exit Sub Else End If Rows("2:2").Select Selection.Delete Shift:=xlUp Wend MsgBox "処理終了" End If End Sub

  • セルの値が0はクリアするマクロ

    エクセル2003です。 ある集計表において 4行目のH列からAM列まで 数値データがあります。 最終行は常に変化します この表内にてセルの値が0のセルは セル内を空白にしたいです。 以下のマクロを作成しましたが If Cells(処理行, 8).Value = 0 Then Cells(処理行, 8).ClearContents をあと(処理行, 13)から(処理行,31) まで記述しなければなりません。 構文的にも処理的にも不利? と思うので、なにかいい方法を教えてください。 Sub 数字0クリア() '2012年2月3日節分 Dim 最終行 '最終列をG列で求めます 最終行 = Cells(Rows.Count, 7).End(xlUp).Row Application.ScreenUpdating = False For 処理行 = 4 To 最終行 If Cells(処理行, 8).Value = 0 Then Cells(処理行, 8).ClearContents End If If Cells(処理行, 9).Value = 0 Then Cells(処理行, 9).ClearContents End If If Cells(処理行, 10).Value = 0 Then Cells(処理行, 10).ClearContents End If If Cells(処理行, 11).Value = 0 Then Cells(処理行, 11).ClearContents End If If Cells(処理行, 12).Value = 0 Then Cells(処理行, 12).ClearContents End If If Cells(処理行, 13).Value = 0 Then Cells(処理行, 13).ClearContents End If Next 処理行 Application.ScreenUpdating = True MsgBox "終了しました" End Sub

  • 【ExcelVBA】セルに入力された値によって書式を変更する

    こんにちは。いつもお世話になっております。 標題の件で質問させて下さい。 セルに入力された値によって塗りつぶす色を変えるマクロを作成しています。 条件付き書式では、条件を3つしか指定できなかったので、マクロにて制御しようと思いました。 値の判定を行い、入力した各文字列の色で塗りつぶされるところは正常に動作しているのですが、 値が入っていてもいなくても、複数のセルを選択し、「Delete」キーを押下すると、背景色がグレーになってしまうのです。 初歩的な質問で申し訳ありませんが、どなたか上記のような動作をする理由をご教授頂けないでしょうか。 以下にソースを載せておきます。 宜しくお願い致します。 --- Private Sub Worksheet_Change(ByVal target As Range) On Error Resume Next If (target.Cells.Value = "グレー") Then target.Cells.Interior.ColorIndex = 15 ElseIf (target.Cells.Value = "イエロー") Then target.Cells.Interior.ColorIndex = 6 ElseIf (target.Cells.Value = "スカイブルー") Then target.Cells.Interior.ColorIndex = 33 ElseIf (target.Cells.Value = "ピンク") Then target.Cells.Interior.ColorIndex = 7 Else target.Cells.Interior.ColorIndex = 0 End If End Sub

  • エクセルマクロ 【空白セルを無視する方法を教えてください】

    マクロを独学で学び仕事に応用しているのですが、どうしても分からないことが発生してしまい、質問です。 内容は、今、エクセルシートのA1~B5の範囲で A B 1 1 1 2 1 2 3 4 1 5 1 という形で入力されています(見難くてスミマセン)。 この状態から「A列とB列に同じ数字が入力されてれば、メッセージBOXを表示して、なおかつOKボタンを押したら該当セルを赤くする」というマクロを作りたいのですが、本来であれば1行目のみ赤くなるはずなのですが、空白セルが含まれている3行目も赤くなってしまうんです。つまり、空白セルも「同じ値」と認識されているみたいなのですが...。 この場合、空白セルを無視するにはどうしたらよいのですか?教えてください。なお、マクロは以下のように作っています。 Sub ナンバーチェック() Dim Btn As Integer For X = 5 To 10 If Cells(X, "A").Value = Cells(X, "B").Value Then  Btn = MsgBox("同じ数値です", vbOK, "警告")  If Btn = vbOK Then   Cells(X, "A").Interior.ColorIndex = 3 Cells(X, "B").Interior.ColorIndex = 3 End If End If Next End Sub

  • エクセルのマクロ。セルの値により複数条件分岐を

    皆様 よろしくお願いします。 エクセルで社内で使っている現金出納帳がありまして。 D6セルから下方向に数字・日本語アルファベット混在して 入力されています。 例「1月13日 現金売上」 「2月13 切手代」 「3月31日 食事料金」 といった具合です。 そのセルの内容を判断して G6セルから下方向に 該当する数字を書きこむべく 以下のようなマクロを作っています。 条件はもっと増えてきた場合に 一個一個条件を書き足すと膨大なマクロになってくると思いまして スマートな書き方がございましたら ご指導くださると助かります。 Sub 科目自動入力() Dim a As Integer a = 6 '内容が空白になるまで繰り返す Do Until Cells(a, 4).Value = "" '「売上」が含まれていたら700 If Cells(a, 4).Value Like "*売上*" Then Cells(a, 7).Value = 700 '「切手」もしくは「レター」が含まれていたら756 If Cells(a, 4).Value Like "*切手*" Or Cells(a, 4).Value Like "*レター*" Then Cells(a, 7).Value = 756 '「残業」もしくは「食事」が含まれていたら746 If Cells(a, 4).Value Like "*残業*" Or Cells(a, 4).Value Like "*食事*" Then Cells(a, 7).Value = 746 '「旅費」もしくは「交通費」が含まれていたら755 If Cells(a, 4).Value Like "*旅費*" Or Cells(a, 4).Value Like "*交通費*" Then Cells(a, 7).Value = 755 a = a + 1 Loop End Sub

  • エクセル2007 参照セルの値が認識されない

    エクセル2007の環境で下記マクロを実行すると、 アクティブシートのセルA1に数字が入っている場合、Sheet1のセルA1に値を転記しても そのセルA1の値をVLOOKUP関数で参照できません。 マクロに問題があるためなのか何処に問題があるのか分からないので教えてください。 宜しくお願いいたします。 【sheet】は アクティブシートの3行目から1000行目までのA列のセルをクリックしたらセルA1に値を表示 その後、下記【モジュール】を使用し、 アクティブシートのセルA1が空白の場合、 A列の数値をSheet1のセルA1に転記し、アクティブシートのA列の数値が空白になるまで循環する。 Sheet1のセルA1の値をVLOOKUP関数で参照した内容を表示、印刷します。 ----------------------------------------------------------------- '【sheet】 Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Target If .Count > 1 + IsEmpty(.Value) Then Exit Sub If Application.Intersect(.Cells, Range("A3:A1000")) Is Nothing Then Exit Sub ActiveSheet.Cells(1, 1).Value = .Value End With End Sub ----------------------------------------------------------------- '【モジュール】 Sub TEST() Dim myBtn As Integer Dim myMsg As String, myTitle As String Dim WS1 As Worksheet, WS2 As Worksheet Dim i As Long myMsg = "●●●" myTitle = "確 認" myBtn = MsgBox(myMsg, vbYesNo + vbExclamation, myTitle) If myBtn = vbYes Then Set WS1 = ActiveSheet Set WS2 = Sheet1 If WS1.Cells(1, 1).Value = "" Then With WS1 For i = 3 To 65536 If .Cells(i, 1).Value = "" Then Exit For WS2.Cells(1, 1).Value = .Cells(i, 1).Value WS2.Cells(1, 2).Value = ActiveSheet.Name 'WS2.PrintOut Copies:=1 Next i End With ElseIf WS1.Cells(1, 1).Value >= 1 Then WS2.Cells(1, 1).Value = WS1.Cells(1, 1).Value WS2.Cells(1, 2).Value = WS1.Name 'WS2.PrintOut Copies:=1 Else End If End If End Sub -----------------------------------------------------------------

  • セル値

    すみません エクセルVBA勉強中のものですが、セルA1とA2がブランクだったら、セルB1に”あ”を表示するという式を作ったのですがうまく動いてくれません ご指導のほどお願いします。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Cells(1, 1).Value <> "" & Cells(2, 1).Value <> "" Then Cells(1, 2).Value = "あ" End If End Sub

  • マクロでセルの値を判定して決められた規則で別の値に変換する

    マクロでセルの値を判定して決められた規則で別の値に変換する E列には従業員番号が入ってます。 半角の数字で5桁です。 00001とか10234とか。 このファイルは約10,000行あります。 ファイルを開くたびに行数は変更されています。 昨日は1,000行、今日は4,000行、明日は8,900行とか。 10,000行の中で同じ従業員番号は何回もあります。 例えば00007は 3,45,678,1023,4567,5345行目に有り計6ケ所とか。 でこの従業員番号を従業員名に変換したいです。 変換した従業員名はF列に入力したいです。 まだ従業員名がなく従業員番号だけが有る場合は 変換しないで番後をそのままセットしたいです。 私のレベルで作成可能なのは Sub 名前変換() '2行目から行う 行 = 2 Do 'E列にデータがなくなったら終了 If Cells(行, 5).Value = "" Then Exit Do '従業員番号00001は山山山山さん If Cells(行, 5).Value = "00001" Then Cells(行, 6).Value = "山山山山" '従業員番号00002は川川川川さん ElseIf Cells(行, 5).Value = "00002" Then Cells(行, 6).Value = "川川川川" 'ElseIf Cells(行, 5).Value文とCells(行, 6).Value文を従業員数分ここに追加 '条件が無い場合は従業員番号をそのまま値とする Else Cells(行, 6).Value = Cells(行, 5) End If 行 = 行 + 1 Loop End Sub これなら、例えば従業員名が変更された(結婚して苗字がかわったとか) そのCells(行, 6).Value文の " " の部分を変更。 従業員数が増加の場合は 都度ElseIf Cells(行, 5)文とCells(行, 6).Value文を 追加していく事でメンテが可能です。 なのですが、現在は従業員数が20名の部署用なのでいいのですが 従業員数が100名の部署の場合に使う場合、導入時に ElseIf Cells(行, 5)文とCells(行, 6).Value文を100個も 作成しなければなりません。何かいい方法はないでしょうか? この対象ファイルはCSVファイルです。 エクセルファイルを開いてその中のマクロ1を起動すると CSVファイルをインポートし別BOOK上でマクロ2(マクロ1のCallで呼び込む)にて編集 (罫線を入れたり、並べ替えをしたり、色をつけたり、太字にしたり...) を行いマクロ1,2を引きつかず名前をつけて保存までをマクロ1で行います。 その編集するマクロ2の中に組み込みたいです。

  • 選択範囲の空白セルに0を入れるマクロ

    Private Sub CommandButton1_Click() If Cells("選択範囲").SpecialCells(xlcellTypeblank).Select Then Range("選択範囲").Value = 0 End If End Sub このマクロを作成したのですが、動きません。 どこが、おかしいのでしょうか?

  • エクセル マクロ ダブルクリックで…(2)

    たびたび申し訳ございません。 先ほどエクセルでダブルクリックをすると順番に該当セル内の値が「有」→「無」→「空白」 となるマクロをご教授頂き、下記の内容で解決した者です。 B列についての該当セルへの入力がなされるという内容だったのですが、実はC列にも同様の処理を致したく、またもや素人はなすすべが無くなってしまいました。 B列は「要」「不要」「請求」「空白」としたいと思います。 たびたび大変恐縮ですがよろしくご教授くださいませ。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("d1:d999")) Is Nothing Then Exit Sub With Target   If .Value = "" Then    .Value = "有"   ElseIf .Value = "有" Then    .Value = "無"   ElseIf .Value = "無" Then    .Value = ""   End If End With End Sub

専門家に質問してみよう