• ベストアンサー

エクセル マクロ 文字列からの行数の取得

エクセルでマクロ初心者です。よろしくお願いします。例えば1列目にデータ名が入力されていてその個数が可変である場合(小計は末尾ではありません)小計行の1列目から数式をいれたいのですが、行数が固定でないため小計と書かれたセルの行数を取得したいのですが、わかりません。いい方法をお願いします。    A B C D データ aa bb cc 小計 ・ ・

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

  • ベストアンサー
回答No.1

Sub test() Dim ad, tmp As Range, y As Long Set tmp = Columns(1).Find("*小計*", lookat:=xlWhole) ad = tmp.Address Do Set tmp = Columns(1).FindNext(tmp) y = tmp.Row '***** ここに処理を記入 MsgBox y Loop While Not tmp Is Nothing And tmp.Address <> ad End Sub これでどうですか? もし小計が一つしかないのであれば、以下でもOKです。 y = Columns(1).Find("*小計*", lookat:=xlWhole).Row Msgboxは確認で入れているので、実際にはいらないです。 Rowというのが行のことです。 たとえば、最終行は以下の式で取得できます。 y = Range("A65536").End(xlUp).Row 基本中の基本だと思うので、頑張って覚えて下さい。

kakakakasa
質問者

お礼

ありがとうございます。 調べながらですが理解できました。 基本から勉強します。

その他の回答 (1)

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

例データ データ 金額 りんご 12 みかん 23 柿 11 ぶどう 5 小計 51 栗 8 キウウィ 23 イチジク 4 もも 1 なし 6 小計 42 グレープ 3 すいか 7 メロン 11 小計 21 ただし、もちろん「小計」のB列は空白 コード Sub Search() Dim objcell As Range Dim strAddress As String '--第1発見 Set objcell = Worksheets("Sheet1").Range("A1:A100").Find(what:="小計") If objcell Is Nothing Then MsgBox "見つかりませんでした" Exit Sub Else frstAddr = objcell.Address f = objcell.Row objcell.Offset(0, 1) = Application.WorksheetFunction.Sum(Range("B2:B" & f)) S = f + 1 End If '--第2発見以後 Do While Not objcell Is Nothing Set objcell = Range("A:A").FindNext(objcell) If frstAddr = objcell.Address Then Exit Do Else f = objcell.Row objcell.Offset(0, 1) = Application.WorksheetFunction.Sum(Range("B" & S & ":B" & f)) S = f + 1 End If Loop End Sub 結果 上記の通り。

kakakakasa
質問者

お礼

ありがとうございます。 とても参考になりました。 第二発見まで対応していて、 とてもたすかりました。

関連するQ&A

  • Excelのマクロを作ってもらえますか?

    こんにちは。 エクセルのマクロで、Sheet1に転々と 入力されているデータを すべてA1の列へ統一して並べ替え(2) 同じデータの数を計算してB2へ記述する(3)などという マクロができるなら作っていただけないでしょうか? もし、数の入った行のみ残して削除までできれば最良なの ですが(4) (2) AA-20 AA-20 AA-20 BB-30 CC-30 CC-30 CC-30 (3) AA-20   3 AA-20 AA-20 BB-30   1 CC-30   3 CC-30 CC-30 (4) AA-20   3 BB-30   1 CC-30   3 このようになのですが、 お時間のあるときで結構ですので宜しくお願いします。

  • エクセルで複数列を二列にまとめる

    エクセルのデータ成形に、知恵を貸していただけますでしょうか・・・ エクセルで以下のようなデータがあります(例では8行8列) コードは本当はランダムです。 #と右下の部分は空白セルです。横には数字、コード、数字、コードの並びで、数字は一行目のみです。 1 aa-1 2 bb-1 3 cc-1 4 dd-1 # aa-2 # bb-2 # cc-2 # dd-2 # aa-3 # bb-3 # cc-3 # aa-4 # bb-4 # aa-5 # bb-5 # aa-6 # aa-7 # aa-8 これらを 1 aa-1 1 aa-2 1 aa-3 . . 2 bb-1 2 bb-2 . . 4 dd-2 というように 1. 複数の列を2列ずつのグループで2列にまとめ 2. それぞれのグループごとに各コードの左のセルにグループの数字をつけたい   (どのコード(aa-1など)がどの数字グループなのか分かるように) と思っています。 なにかいい方法はありますでしょうか。 調べてはみたのですが、 複数列を一列ではなく、二列ずつまとめていることや、 各列の長さが一様ではないことなどから 各所で紹介されている方法が適用できないでおります。 VBAもほとんど使ったことがないので、それらを応用できません。 どうぞ知恵を貸していただけたらと思います。 よろしくお願い致します。

  • COUNTBLANKのような役割を持つマクロ

    COUNTBLANKとはちょっと違うのですが、 行 ↓ A B C D ←列 1  AB AC AD AA 2 BB 3 C CC 4 DD 上記のようなデータがあります。 2,4行目みたいにA列とB列とC列が空白だったら、E2、E4セルに ○っていのを表示させるようなマクロってできないでしょうか。 また、Dのセルに値がある限り、その行数分上記の処理を繰り返す 方法があったら教えてください

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

    毎日行数の違うデータの隣に数式を入力してフィルでコピーしていますが簡易のマクロを組んでみました。ですが行数が変わるためマクロ登録した時の行数までしか数式がコピーされません。 画面1のようにC1、D1セルの数式をフィルでコピーしたマクロを登録しました。画面2のようにデータが多くなるとC5、D5までしかコピーされません。最初はC1、D1だけに数式を入力してマクロ実行後、フィルでコピーしていましたが面倒な為、現在は行数を多く設定していますが無駄に数式が入るためにデーターが重くなります。マクロでB列の最下セルを検索しその列までC,Dセルをコピーというなマクロが出来るなら教えて頂きたいです。VBAの知識を必要とすると思いますがよろしくお願いします。

  • EXCELで、文字列の行数が変わる

    EXCELで、「折り返して全体を表示する」設定にしたセルに、ちょうどセル幅程度の文字列を入力した場合、画面では1行におさまって見えるのが、印刷すると2行にわたり、結果、1行分の高さのセルでは後ろの文字が見えなくなることがあります。 印刷プレビューにすると印刷したときの行数がわかるようですが、 (1) 印刷した時に必要となる文字列の行数にあわせて、セルの高さを変える方法はないでしょうか。 (2) そもそも、画面表示と印刷とで、文字列の行数が変わるのは何故でしょうか。(画面表示の文字列の長さと、プリンタ出力の文字列の長さが異なるように見えます。) (3) 文字列が1行でおさまるか、2行にわたるかは、プリンタにも依存するものでしょうか。 質問事項が多くなりましたが、お分かりの項目だけでも結構です。 どなたかお教えいただければありがたいです。 EXCELのVersionには関係ないと思いますが、参考までにEXCELは2003です。 よろしくお願いします。

  • 最終行を取得して、別の列にコピーするマクロ

    最終行を取得して、別の列にコピーするVBAマクロを教えてください。 (Excel2003です) 具体的には、次の通りです。 (1)A2から下方に項目NOが入っています。可変です。  A2から項目NOの最終行までの行数をカウントします。 (2)B3:D3には数式が入っています。  B4:D4以下に数式を(1)で取得した行数分だけコピーします。 かなり緊急で困っています。 教えていただけると助かります。

  • エクセルで、文字列から文字を取り出す自動マクロを教えてください。

    住所の入った、エクセルのファイルを頂くのですが、C2せるから、C50程度のセルまでに 「〒123-4567兵庫県○○市○○3-4-5」と 一つのセルに入っています。 これをマクロで、C列の前に、一列挿入して、自動的に、〒番号の部分を切り取って、貼り付けるという 操作を、マクロでくみたいのです。 データは毎週貰うのですが、件数は5件~50件程度までと幅はあります。データは2行目から連続して並んでいます。「列を挿入して」「LEFT関数で取り出すという関数をC2に入力」「数式をデータが終わるところまでコピー」「元のデータから〒番号を消去」というマクロを組みたいのです。お手数ですが、初心者にでも分かるようにマクロを教えて頂けませんでしょうか?

  • エクセルファイルのセル値に特定文字列を追加して別ファイルに

    VB2008でのプログラム方法についての相談です。以下の手順を実現したいです。 (1)エクセルファイルのあるセル中にあるデータを取得 例)A1セルの値"AA"、A2セルの値"BB"、A3セルの値"CC"..... (2)決まりきった特定文字列と(1)の値を結合 例)くっつけたい文字列 " "+AA ⇒ くっつけたい文字列"AA" くっつけたい文字列 " "+BB ⇒ くっつけたい文字列"BB" くっつけたい文字列 " "+CC ⇒ くっつけたい文字列"CC" (3)テキストファイルを生成 ○○○.txt 例) くっつけたい文字列"AA" くっつけたい文字列"BB" くっつけたい文字列"CC"

  • 【VB】バラバラの行数の文字を結合+追加

    Exelのマクロで ご教授お願いします。 AABB 2012 0219 1111 2222 3333 4444 5555 AABB 2012 0220 1111 2222 3333 4444 5555 6666 7777 AABB 2012 0221 1111 2222 このような、空欄1行を挟んだデータが数十件あります。すべてA列です。 これを・・・ AABB 2012 0219 1111 2222 3333 4444 5555 END AABB 2012 0220 1111 2222 3333 4444 5555 6666 7777 END AABB 2012 0221 1111 2222 END このようにマクロで一行にまとめ,末尾に”END”を追加したいのです。 1つのデータの行数は2行だったり、6行だったりと変則です。 よろしくお願いします。m(__)m

  • エクセルのマクロで

    こんにちは、お願いします。 エクセルで小計を自動計算させたいのですが・・・ 同じ日付のデータがいくつか入力されていて その日付ごとの小計を列で出したいのです。  日付    値  小計 2002/9/1  123 2002/9/1  456   579 2002/9/2  789 2002/9/2  321  1100 という感じで・・・ このとき小計を出すセルへカーソルを置き、日付を入力するか、またはその行と同じ日付になる小計を出す、 関数では出来ないですよね? 関数式ではできなとすると、マクロが作成できるでしょうか? ご存知の方がいらっしゃいましたら、是非教えてください。 宜しくお願いします。   

専門家に質問してみよう