• ベストアンサー

VBA

一つ人一つのセルの値を上から順番に比較していき、マッチしたらそのマッチしたセルの行の値を拾ってnの関数に格納する方法を教えてください。

  • homma
  • お礼率84% (744/884)

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.2

>セルの縦列に色々な値が入っています これが1枚目のシートの1列目(A列)という条件なら かつ、 途中に空白のセルが無い条件なら、 こんなコードでいかがでしょうか。 Option Explicit Sub Sample()  Dim RowCounter As Long  Dim TGSheet As Worksheet  Dim HitFlg As Boolean  Dim rcData As String    rcData = InputBox("データ入力")    Set TGSheet = ThisWorkbook.Sheets(1)  HitFlg = False  RowCounter = 1  If rcData = "" Then Exit Sub  Do   If TGSheet.Cells(RowCounter, 1).Value = "" Then Exit Do   If TGSheet.Cells(RowCounter, 1).Value = rcData Then    HitFlg = True    MsgBox "ヒットしました:" & rcData & " /行番号:" & Format(RowCounter, "0")    Exit Sub   End If   RowCounter = RowCounter + 1  Loop    If HitFlg = False Then   MsgBox "ヒットしません:" & rcData  End If End Sub

homma
質問者

お礼

ありがとうございました。 解決しました。

その他の回答 (1)

  • f272
  • ベストアンサー率46% (8013/17127)
回答No.1

一つ人一つの...ひとつひとつのということだろうと推測できる。 セルの値を上から順番に比較していき、マッチしたら...事前に比較対象の値が与えられていると仮定できる。 そのマッチしたセルの行の値...行番号のこと?それともマッチした行の他の列の値のこと? を拾ってnの関数に格納する方法...nの関数というのが意味不明です。 もう少し他人にわかるように書いてください。

homma
質問者

補足

失礼いたしました。 質問を整理します。 セルの縦列に色々な値が入っています。 最初にインプットボックスに任意の値をいれて その値を上記のセルの上から順に比較をしていきます。 比較してインプットボックスの値と順番に読み込んだ値がマッチしたときのセルの縦の値をひろうということが目的です。 宜しくお願いいたします。

関連するQ&A

  • またまたVBAのデータの型変数で質問

    あるセルに「=IF(N50 =O50,"","×")」の関数が入ってます。比較して合っているならNULL、相違なら×(バツ)をいれるというものです。 質問はこのセルの値をマクロである変数に格納するにはどんな型を使用すればいいのか?です。 格納できればどんな方法でもいいです。 Dim buf as String と変数の宣言してbufに上記の関数の結果のみを入れたいのですが型が違いますとエラーがでます。セルが算術式のときの型ってなんでしょうか? 目的はNULLは大丈夫なのですが、バツ(×)を変数に格納したいです。 よろしくお願いいたします。

  • VBAで困っています。

    VBAで比較ツールを作っています。2つのワークシートを比較し、同じセルの位置にある値を比較し、値が異なっていれば色を変えるというものです。行をキー(1行、2行、3行・・・)として2つのワークシートですべてのキー行のセルの値が一致する列同士を比較する方法があるのですが、キーを1個でも100個でも指定した場合のプログラム構造を知りたいのです。 お力をお貸しください。 Sub DF() Dim Before As Range Dim After As Range Before = Worksheets("Sheet1").UsedRange.Value After = Worksheets("Sheet2").UsedRange.Value キーとなる行数をカウント   カウントした行を最大値を変数に設定   ・・・・   ・・・・   ・・・・ End Sub

  • Excel VBA 値取得について

    お世話になります。 どなたかお力をお貸しください。 Excel2003 VBAでプログラムを組んでおり、エクセルのシートをデータベース代わりに利用しています。 複数のブック散乱している10万個近くのテキストボックスの値を、 「A」というブックの「シート1」のセルに格納して行きたいと思っております。 値の格納方法としては、「A」ブックの「シート1」の セルA1からA2、A3…A列最終行(6万強)まで縦の並びにデータを格納していきます。 ただし、「シート1」に格納したい値は10万個近くあるので、 A列だけでは足りなくなります。 A列の最終行まで値を格納し終えたら、自動的にB列に移動して、 セルB1からB2、B3…B列最終行(6万強)という遷移させていきたいのです。 A列のみに格納していくのであれば、理解できるのですが、 自動遷移がわかりません。 For i = 0 To 最終行(6万強) シート1.Range("A" & i) = 参照元 Next i よろしくお願いします。

  • Excel VBAでの値の比較

    お世話になります。 Excel VBAでの値の比較方法についてご教授頂きたく存じます。 下記のような値がセルに入っていると仮定しまして、 セルA1とセルG1を比較する セルA2とセルG2を比較する セルB1とセルH1を比較する セルB2とセルH2を比較する 値が違う場合のみ、A列、又は、B列のセルの色を変更したいのですが・・・。 下記例の場合であれば、B1とA2がセルの色が変われば良いです。    A列 B列    G列 H列 1行  1  1     1   2 2行  2  2     3   2 VBAで実現したいと思います。 何卒、宜しくお願い申し上げます。

  • (MS-Excel)複数の条件にマッチする複数のセルを配列?で出力させ

    (MS-Excel)複数の条件にマッチする複数のセルを配列?で出力させたい。 たとえば、条件1=A列で値が数値であるセルと、条件2=条件1でマッチしたセルと同じ行でC列で値が「その他」という文字列であるセルを検索させます。 そして、A列でマッチしたセルの値をE列に出力させて、C列でマッチしたセルの値をF列に出力させたい、というような感じです。 VLOOKUP関数などで、{配列}を使うなどすれば可能だと思って試行錯誤したけどダメでした。 なお、データベース関数のように条件セルなど作業セルが必要な方法は使いたくないです。 よろしく、お願いします。

  • vbaにて並べ替えしたい。

    並べ替えするには? ただいまVBA学習中です。 sheet1に次のような文字列がセルに入力されているとします。 3列で30行あります。   A列 B列 C列 1行 あ  い  う 2行 え  お  か ...以下30行まで続く。 これらを sheet2に A列 あ い う え お か のようにひとつの列へ縦にするにはどのような記述になりますか? 私なりの考え方ですが セルのスタート位置はシート1のA1とします。  シート1にて  ・あ い う と順番に配列に格納  ・セルを左に2つ下に1つ移動   この動作を30回繰り返す(for next 使えばでいいですよね?)  シート2に移動してA1から下方向へ  格納された文字列を入力する。  と、考えてみたものの記述の仕方がわかりません。 力貸してください。   

  • エクセルVBA MATCHをユーザー定義関数で使う

    ユーザー定義関数の質問です。 ある値をB列で探し、見つけたセルの行番号を取得したいのですが分かりません。 条件が一つあってそれはAの値が10以下のものは検索から除外するということです。 例 A  B 6  50 5  45 7  2 12 45 11 9 例えばBが45かつAの値が10以上であるセルの行番号はこの例だと4になります。 ワークシート関数を使うと{=MATCH(45,(A1:A5>=10)*(B1:B5),0)}でできました。しかしユーザー定義関数で.Match(45, Worksheets("Sheet1").Range("A1:A5>=10") * Worksheets("Sheet1").Range("B1:B5"), 0)とやっても#VALUE!となってしまいました。何がおかしいのでしょうか。

  • VBA Match関数の使い方について

    お世話になります ご教示頂けたら幸いです シート結果セルE4の値を検索してシート結果G4の値を 検索行のB列に値を転記したいです 下記のように書くとMatch関数行でエラーが出てしまいます どの様にすればいいのでしょうか? お手数おかけしますが 何卒よろしくお願いいたします With Sheets(Worksheets("結果").Range("A4").Value) WorksheetFunction.Match(Worksheets("結果").Range("E4").Value, Range("A1:A1000"), 0).Offset(3) = _ Worksheets("結果").Range("A4").Offset(2).Value End With

  • VBAのxlDownと同じ昨日の関数

    VBAでRange("A5").End(xlDown).Rowとしたら、A5から下方向にデータが連続して入力されている 最終行を返しますが、これと同じ機能を持ったエクセル関数はありますか? 今、A5からA10までデータが入っていたら、 初めて空白セルが存在する一つ上のセルの行の「10」という値か A5からA10まで6行データが入力されているので、「6」という値を取得したいです。 出来れば、後者がありがたいです。 Counta関数を使って、 COUNTA($A:$A)-COUNT($A$1:$A$4)と書きましたが、A12以降に値が入っていたら、対応できないので上手くないかなと思います。

  • エクセルの関数について

    エクセルの関数について いつもご回答者の方々にはお世話になっています。 関数でまた教えていただきたいのですが、 下記画像のようなデータ(解像度の規制上、1月の途中までのデータのみ表示しています)から、該当月の3行目の値が1になっている最初のセルの1行目(1 月であれば1/1)と、3行目の値が1になっている最後のセルの1行目(1月であれば1/6)の値を返すような関数はありますでしょうか? 条件は下記です。 ・C40-N51にそれぞれの月のデータを作成する。 ・作業用の列/行は作成できない。 ・3行目が1になっている何番目などではなく、最初と最後を指定したい。  (月によっては6が1日だけある日(31日)があり、その場合は本関数で導き出される最初と最後を○/31としたい。) 自分なりにHLOOKUPとMATCHなどを組み合わせてやってみたのですが、どうしてもうまくいかず。 識者の方々よろしくお願いいたします

専門家に質問してみよう