• ベストアンサー

エクセル:マクロの話

エクセルのマクロを使って、以下のことを考えています。 どのようにプログラムを入れればいいですか? (マクロは、ほんの少ーーしだけわかる程度です) 今、1列目(A1~Z1)にある文字が入っているとします。 その中に、「○○」という文字が1つあるとします。 for文を使ってi=1~26にしてA1~Z1までひとつずつ「○○」 という文字が入っているか「検索」し、i+1行目のデータ をB1に入力することを考えています。 全部教えてくれたら大変ありがたいが、とりあえず 「検索」をどのようにするのか教えて欲しいです。 たぶん、if文を使うのかなーーと思っているのですが、 どのように使えばいいのかわかりません。 よろしくお願いします。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

通常検索にはFindメソッドを使いますが今回は検索する範囲が狭いのでFor~Next文でやってみます Sub Macro1() Dim idx As Integer  For idx = 1 To 26   If Cells(idx, "A").Offset(1, 0).Value = "○○" Then    Cells(idx, "B").Value = Cells(idx + 1, "A").Value   End If  Next idx End Sub 検索範囲が非常に多きときはFindメソッド、FindNextメソッドを使う方が高速でに処理できます Sub Macro2() Dim r As Range Dim adr As String  Set r = Range("A1:A26").Find(What:="○○", LookIn:=xlValues, Lookat:=xlWhole)  If Not r Is Nothing Then   adr = r.Address   Do    r.Offset(0, 1).Value = r.Offset(1, 0).Value    Set r = Range("A1:A26").FindNext(r)   Loop Until r.Address = adr  End If End Sub

その他の回答 (1)

回答No.1

InStr 関数を使ってみてください。 ある文字列の中に、指定した文字列が含まれているかどうかを返してくれる関数です。 詳しくはヘルプでどうぞ。

shiritai
質問者

補足

問題間違えました。 1列目なので、A1~A26ですね。 で、たとえばA15が○○だったら、A16の中身を B1に入れたい、ということです。

関連するQ&A

  • 【エクセル】マクロ

    すみません。 エクセルのマクロのプログラム教えてください。 セルA1~A30に 「1」~「5」のいずれかの数字が 入っています。 そのA列の数字をもとにB1~B30のセルの書式を 変えたいと思っています。 例えば、「1」なら赤色、「2」なら青色、「3」なら緑色・・・ となるように考えています。 for文で1~30まで繰り返し、if文とswitch文で実行すると 思うのですが、どのようなプログラムを書けばいいですか? よろしくお願いします。 3種類なら条件式書式が使えるのですが、4種類以上だと使えないので マクロで実行しようと思っています。

  • エクセル2000のマクロで、if文が想定通りに動かない

    90から93列目にかけて、データが 0又は3~4桁の数字が入っている状態です。 4810,0,0,2430 以下はマクロの抜粋です。 やりたいことは、0でなければ各変数に1を代入し、95列めに合計を入力します。 If Cells(i, 90) <> 0 Then w = 1 If Cells(i, 91) <> 0 Then x = 1 If Cells(i, 92) <> 0 Then y = 1 If Cells(i, 93) <> 0 Then z = 1 Cells(i, 95).Value = w + x + y + z このマクロを実行しますと、実際には0でない列が2列にもかかわらず、95列目に3と入力されてしまいます。1行ずつ実行してみたら、if文の3行目の92列目の判定が変です。 実行中に、カーソルをかざすとCells(1, 92)=0と表示されるのですが、合計を代入するところの y には1が代入されてしまっています。 何か間違っているんだと思いますが、分かりません。よろしくお願いします。

  • VBAマクロの記述を教えてください m(__)m 娘から聞かれたのですが主婦の私にはわかりません

    VBAマクロの宿題です。どうもエクセルのことのようですが、それ以上は私にはわからず困っています。    A   B   C   D   E  1  ○  ×  ○  ×  ○ 2  5  5 3 12 12 4  8  8 5 15 15 6 31 31 7  4  4 8  3  3 9 87 87 10  18  18 11 183 87 以上がエクセルのシートだと見てください。 準備:A1セルからE1セルに○あるいは×を入力する。    A2セルからE10のセルに適当な2桁の数値を入力する。 問題:1行目が○なら11行目に2行目から10行目までの    合計を計算・表示する。    1行目が×なら11行目に2行目から10行目までの    最大値を表示する。 ヒント:文字のIF文      プログラム上で文字を扱う場合、ダブル・クォーテー      ションで文字をはさむ。      IF Cells( 、 )="○" Then     プログラムの流れ |     For |       IF |         For |         Next |       Else |         For |         Next |       END IF |     Next 以上です。もう何が何やらちんぷんかんぷんです。どなたか助けてください。

  • エクセルのマクロについて教えてください

    エクセルで、その行の中に赤色のセルがある場合は、その行のA列のセルに"○"を入れるというのは、マクロで書く場合はどのように書けばよいでしょうか。 行は1~100まで、列はA~Zまであります。赤色のセルはB列~Z列の所々に点在します。

  • エクセルのマクロについて

    下記は、A列3行の7文字目~10文字と B列5行~文字のある最後の行までの範囲の左から1文字目~4文字 に相違がある場合 MsgBox i & “行目” を出す。 というマクロなのですが、『B列5行~文字のある最後の行までの範囲』の中でも『空白のセルに関してはMsgBox不要』というふうに付加えたいのですがどのようにすればよいでしょうか。 Sub Macro1() Dim i As Long Dim sOrgText As String Dim ltotal As Long With ActiveSheet sOrgText = Mid(.Cells(3, 1), 7, 4) ltotal = .Cells(65536, 2).End(xlUp).Row For i = 5 To ltotal If Not Mid(.Cells(i, 2), 1, 4) = sOrgText Then MsgBox i & "行目" End If Next i End With End Sub

  • エクセルマクロ 複数特定文字を含む行以外の削除

    M列にある特定の文字が含む行以外のものを削除するマクロを教えて下さい。 現在ネット検索で見つかったマクロを使用しています 【現在使用中のマクロ】 Sub Sample1() Dim i As Long For i = Cells(Rows.Count, "M").End(xlUp).Row To 2 Step -1 If InStr(Cells(i, "M"), "検索したい文字") = 0 Then Rows(i).Delete End If Next i End Sub これだと検索したい文字が1つしか利用できません。 「検索したい文字列1」または「検索したい文字列2」を含まない行を削除したいのですが どのようにマクロを組めばよいのでしょうか? こちらまったくの初心者です。 上記の書式にはこだわりませんので、わかる方教えて下さい。

  • エクセルのマクロで悩んでます

    はじめて投稿いたします。 現在、エクセル2000でマクロを組んでいるのですが、何日も悩んでそこから動けないので質問させていただきます。 やりたいことは、 (1)検索フォームの入力テキストに記載した数値を読んで検索ボタンを押すと、 (2)データブック.xls内の完全に一致した数値のセルの行をアクティブにして (3)その行のA列からO列の値をコピーして (4)入力ブック.xlsの入力シートのB4:B18に数値だけ貼り付け したいと考えています。 検索フォームは入力ブック.xls内で作成しています。 今のところ、(3)でA列の値を読んで、(4)でB4セルに貼りつけということはできているのですが、複数になるとできていません。 根気よく、同じプログラムを書くのが良いのでしょうか? かなり面倒なので、もっと簡単にかける方法があれば教えてください。

  • とほほのエクセルマクロ

    以下の文の[-1899]の部分を可変型にしたいのですが。 どなたかご存知有りませんか? ActiveCell.FormulaR1C1 = "=COUNTIF(R[-1899]C:R[-1]C,""いっしょだよ"")" ==================================== マクロの説明です。 ==================================== エクセルマクロでsheet1にデータを入力していって、 sheet1のD列内に同一のコードがないかをチェックするために sheet1のコピーを作成してD列でソートしてから D列の1行目=2行目ならK列に”いっしょだよ”という メッセージを出すようにIF文を書きこんでいきます。 最後にこの”いっしょだよ”というメッセージが何件あったかを見たいので、 一番下の行+1行目に ActiveCell.FormulaR1C1 = "=COUNTIF(R[-1899]C:R[-1]C,""いっしょだよ"")" という文を入れたのですがこれだと自分が居る一つ上のセルから 1899上までしか行かないのですが、毎回データを入力して行数は増えていってしまいます。 どのような、文にしたらよいのか教えてください。 お願いいたします。

  • Excelのマクロに関して

    Excelのマクロで特定のセルに特定の数値が入力されている場合、違うセルにある文字列を入力させる場合 すいません。 説明がものすごく悪くて申し訳ないのですが。 A列(行は100くらいまで)に「100」の数値が入力されている場合に、同じ行のE列に文字列「○○」を返す場合は どのようなマクロを使ったらよろしいですか。 会社の人が Sub TimeIntervalPaint() Dim x As Integer, op As Integer Dim TI As Range Application.ScreenUpdating = False Cells.Interior.ColorIndex = xlNone op = Range("B3").End(xlDown).Row Range("E3:BF" & op).ClearContents Call WorkTime For x = 3 To 150 If Range("A" & x).Value = "101" Then If TI Is Nothing Then Set TI = Union(Range("L" & x), Range("AD" & x), Range("T" & x, "W" & x)) Else Set TI = Union(TI, Range("L" & x), Range("AD" & x), Range("T" & x, "W" & x)) End If こういったマクロを登録しているのですが、新たにE列に文字列を入力できるように改良したいのです。 既に退職していて聞くことすら出来ません。 説明がものすごく悪いのは分かっていますが、どなたかご教授ください。

  • マクロで作ってほしいのです。

    ある行のセルの決まった文字を検索し他の行のセルに別の文字を入力するマクロを作ってほしいのです。下の例で言えばA列にある"大根"(A5,A7)をさがしD5,D7に"特売日"と入力するマクロを作ってほしいのです。よろしくお願いいたします。

専門家に質問してみよう