• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マッチングの簡素化)

マッチングの簡素化

このQ&Aのポイント
  • エクセルVBAで予想数字のマッチングと結果出力を自動化する方法を教えてください。
  • ナンバーズ3やナンバーズ4の予想をする際に、エクセルVBAを使用して予想数字のマッチングと結果のみを表示するシートを作りたいです。
  • 予想数字をシートに貼り付ける作業以外は自動化し、予想数字のマッチング結果のみを表示するエクセルVBAのコーディング方法を教えてください。

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

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

こんばんは! すべて自動とはいきませんが・・・ VBAでの一例です。 ↓の画像でA列が「予想数字」・B列に予想数字をコピー&ペーストするとします。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, j As Long Application.ScreenUpdating = False j = Cells(Rows.Count, 3).End(xlUp).Row If j > 1 Then Range(Cells(2, 3), Cells(j, 3)).ClearContents End If For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.CountIf(Columns(2), Cells(i, 1)) Then Cells(Rows.Count, 3).End(xlUp).Offset(1) = Cells(i, 1) End If Next i Application.ScreenUpdating = True End Sub 'この行まで ※ コマンドボタンを使えば、クリックするだけでマクロを走らせることが可能です。 ご希望の方法でなかったらごめんなさいね。m(_ _)m

moguo4649
質問者

お礼

いつもお世話になります。 早速のご回答ありがとうございます。 私が意図していた形の回答を頂き嬉しいです。 さっそく、試してみます。

その他の回答 (3)

回答No.4

>これまでは、VLOOKUP等の関数を使用してましたが、 >毎回、毎回セルに予想数字を貼りつけて、関数も貼りつける作業が >面倒くさくなり、エクセルでシート予想数字の貼り付け後は、 関数を張り付ける作業をマクロの自動記録で記録しても良いと思います。 その後の作業も記録してみてください。 [Alt]+[F11]でプログラムの中身を見てみましょう。 標準モジュール内です。(記録中も見られます)

moguo4649
質問者

お礼

回答ありがとうございます。 マクロの自動記録の方法ですか、 思いつきませんでした。 ありがとうございます。

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

丸写しすれば仕舞いのような解答は出ているようだが、こんなので、出来ました、といっていると進歩しないよ。 だからコードは書かない。1つの方法でも自力でやって見ては。 ーー 例えば 色々なロジックがあるが (1)探す対象 Sheet1  のA列 (2)探す数字 Sheet2  のA列 として、 (1)Sheet1のA列のセル範囲Rangeが、その作業の都度変わるようだから、最終行(d1)を掴み(このコードぐらいわかるだろう) Range(”A2:A" &d1)でセル範囲が出来る (2)Sheet2のデータも同じく最終行をd2に掴む。 そしてSheet2の2行目から最終行までの各セルをFor Nextで繰り返し検索語にする。 (3)FindメソッドでSheet2の語(1セルの値)でSheet1のA列を検索する。 (4)見つかればそのB列にサインとして1でも立てる。 (5)Sheet2の最終行までFindを実行して、Sheet1でB列に1となってない行を、捜してどこかへ抜き出す ーー (6)そもそも1件の検索はマクロの記録をやってみよ。どういうコードかすぐ判る。これもやっていないで質問しているのか。 (7)見つからない場合の処理は,Googleででも「VBA Find 見つからない」で照会でもしたか。 http://officetanaka.net/excel/vba/cell/cell11.htm ほか多数の記事があるじゃないか。 === ほかのロジックだが、両者ソートして、マッチングのアルゴリズムというのを使う方法(オフラインバッチ処理でよく使われる)があるが、質問者には説明が長くなるので略。わたしも回答に使ったことがあるが。 === 質問は情況を説明するので精一杯のようだ。 ロジックを自分で考え出す訓練をしないと、VBAの文法やメソッドを覚えても先に進めない。 これは経験を積まないと、整理して解説した書物は見つけにくいのだ。 幼稚なロジックでも自分で1方法なり、数日掛けて考えること。WEBに直ぐ質問してはだめ。

moguo4649
質問者

お礼

いつもご指導ありがとうございます。 確かにスキル以上の事を質問していて 回答がすぐ得られるので満足している所はあります。 それは、予想数字を抽出(決定)するための補助として エクセルを使用するという考えがあるので、 1から分厚いエクセルの本を見ても自分がやりたい事がそのまま載っている 訳でなくロジックを1つずつ考えていても終わりが見えないため、 それなら皆様に質問して得た回答で得たい結果が得られればそれで良いと思ってます。 なので、今後もこのような質問はすると思いますがご容赦下さい。 しかし、ご指摘の通り単純なロジックから考える事の積み重ねである事は解っています ので、こちらは、亀のペースで勉強してゆきます。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

マスターシートのA列のデータと別シートのA列に貼り付けたデータで重複するデータを抜き出すなら以下のような関数で表示できます。 =IFERROR(SMALL(IF(COUNTIF(マスター!$A$1:$A$1000,Sheet2!$A$1:$A$1000),$A$1:$A$1000),ROW(A1)),"") 配列数式ですので入力後Ctrl+Shift+Enterで確定して適当数オートフィルコピーしてください。 再計算に時間がかかる場合は、Excelのオプションの詳細設定から計算方法を「手動」にして、必要な時に(データをコピー後に)F9キーを押すことで再計算した方が動きが軽くなるので良いと思います。

moguo4649
質問者

お礼

いつもお世話になります。 早速のご回答ありがとうございます。 ちょっと試してみます。

関連するQ&A