• 締切済み

Excelデータを条件毎に分類したい

Wendy02の回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。Wendy02です。 後々考え直してみて、ご自身で、マクロで作りたかったら、それは、ご自身の説明をまじえて、その旨を提示してくださいね。私たちが書いた後に、それに対して、その方法は違う、自分で考えます、というのは、ちょっと、話の順序が違うような気がします。 >空白なら検索列も空白の物を読込んでしまう為、今回の場合では適応しないのです。 私の考えた方法に間違いがなかったことを証明するために、作ってみました。単なる区切り文字の「ある・なし」だけのことですから、それでダメ出しされたら敵いません。 '-------------------------------------------------- Sub ArrayChecker()   Dim Sh1 As Worksheet   Dim Sh2 As Worksheet   Dim myData As Variant   Dim buf1 As String   Dim mySearch As Variant   Dim mySearch2 As Variant   Dim buf2 As String   Dim buf3 As Integer   Dim LastCol As Integer   Dim i As Long, j As Long   Dim n As Long, m As Long, k As Long, l As Long   Dim Ret As Variant   Set Sh1 = Worksheets("Sheet1")   Set Sh2 = Worksheets("Sheet2")   With Sh1.Range("A1").CurrentRegion    LastCol = .Columns.Count    ReDim myData(1 To .Rows.Count - 1)    For i = 2 To .Rows.Count      For j = 1 To .Columns.Count       buf1 = buf1 & vbTab & .Cells(i, j).Value      Next j      myData(i - 1) = Mid$(buf1, 2)      buf1 = ""    Next i   End With   With Sh2.Range("A1").CurrentRegion    ReDim mySearch(1 To .Rows.Count - 1)    ReDim mySearch2(1 To .Rows.Count - 1)    For m = 2 To .Rows.Count      For n = 1 To .Columns.Count - 1       buf2 = buf2 & vbTab & .Cells(m, n).Value      Next n      mySearch(m - 1) = Mid$(buf2, 2)      mySearch2(m - 1) = .Cells(m, n).Value      buf2 = ""    Next m   End With   ReDim Ret(1 To UBound(myData), 0)   For k = LBound(myData) To UBound(myData)    For l = LBound(mySearch) To UBound(mySearch)      On Error Resume Next      buf3 = 0      buf3 = WorksheetFunction.Match(myData(k), mySearch, 0)      On Error GoTo 0      If buf3 > 0 Then       Ret(k, 0) = mySearch2(buf3)       Exit For      End If    Next l   Next k   Sh1.Cells(2, LastCol + 1).Resize(UBound(Ret, 1)) = Ret     Set Sh1 = Nothing: Set Sh2 = Nothing End Sub '--------------------------------------------------

kyoutofu
質問者

補足

>私たちが書いた後に、それに対して、その方法は違う、自分で考えます、というのは、ちょっと、話の順序が違うような気がします。 何か、誤解されているようなので一言ご説明させていただきます。まず、最初に当然の事ですが、こちらに質問をさせていただく前に、思いつく限りのキーワードでヒットした過去の質問は全てチェック致しましたし、マクロのマニュアル本も数冊は読みましたし、結果を得られるであろうと思われる様々な方法を考え、作成したマクロもかなりの数になりました。それでも余程、私の理解力がないのか上手く対処できなかったので、質問をさせていただいたのです。ですが、私が言葉足らずだった為、やりたかった事が伝わらずにお答えをいただいたようなので、その旨をご説明し、お詫びとお礼を申し上げた上で、質問の件自体をどうするのか、諦めるのか、もう一度質問し直すのか何らかの結論をお伝えしないと、回答してくださる方もお困りになるだろうと思い、「もう少し考える」と申し上げたのです。内輪の事情ですが、この処理は業務命令の為、どんな事をしても近日中にこの処理を終えなければならず、少しでも効率よくする為に何か方法を考えないといけなかったのです。私としては、自分が考えた方法の1つを参考の意味で例に挙げただけで、それに固執する気も、貴方の考え方に異を唱える気も全くありませんし、まして「安易に他人に尋ねて、思ったような結果が得られなかったから、仕方がないから自分で考えよう」という事では決してないのです。 そこの所はご理解していただきたいのですが。

関連するQ&A

  • エクセル、条件をつけてのデータ反映計算式

    エクセルにて、条件をつけてのデータ反映計算式をお教え下さい。 ※過去質問など検索しましたが、ピッタリあうものをさがす事ができず、 自己解決できなかった質問させていただきます。 【内容】 ・シート1とシート2の品番が一致している事が条件。 ・シート2にある「D 原価」を、シート1「E (空欄)」に反映させたい。 シート1 A 商品名 B 売価 C 品番 D 個数 E (空欄) シート2 A 商品名 B 売価 C 品番 D 原価 【追加質問】 ・今回異なるシートを検索対象としましたが、 別データ(ブック)を対象にして、検索できますでしょうか。 ・「シート1とシート2の品番が一致している事が条件。」とは別に、 「(もしくは)シート1とシート2の商品名が一致している事が条件。」を 加えることはできますでしょうか。 以上です。どうぞよろしくお願いします。

  • VBAでのデータ並び替え、条件判断について

    Excel2003、VBA6.5でマクロに挑戦しているVBA初心者です。 学生時代にプログラムはかじった事があるのですが、マクロは勝手が分からず、 以下のようなマクロを組みたいのですが、そもそもプログラムはどこの ウィンドウに書くのか?という辺りから調べ出す始末のため、皆様の お知恵をお借りしたく、投稿しました。 【目的】 Sheet1に貼り付けられたデータを、精査(並び替え、条件判断)し、結果をSheet2に出力させたい。 Sheet1(入力データ) 1行目は項目名 データA1,データB1,データC1,データD1,データE1 データA2,データB2,データC2,データD2,データE2 … … データA11,データB11,データC12,データD11,データE11 データA12,データB12,データC12,データD12,データE12 ※データEのみ、整数型で後は文字データになります。  また行数というか、データ量は20~30行程度を想定してます。 Sheet2(出力データ) 1行目は項目名 日付,データB1+データC1の文字列を結合,固定値2,条件判断結果1(データD1より条件判断) 日付,データB2+データC2の文字列を結合,固定値2,条件判断結果2(データD2より条件判断) … ※Sheet1のデータ1行は、すべてが必要でありません。一部のみがあればOKです。  上記の例だと、Sheet1のデータAとEはSheet2では不要です。 ※日付…マクロを走らせた日付をMM/DD形式で出力させたい ※条件判断結果…(データD1がAMだったら09:00、PMだったら13:00、PM2だったら15:00という値を返すようにしたい) 流れを考えてみましたが、 1)データ型を宣言して、 2)1行を配列に読み込む 3) a)データB列、C列の文字列を結合  b)データD列の条件分岐 4)配列からデータを書き出す 5)Sheet1の行が空白だったら処理完了 という感じかと思っているのですが、具体的にマクロにできず(関数をうまく使えず)、困っています。 Findメソッドか、Vlookupあたりで必要になるデータだけ、Sheet1で検索した結果をSheet2に埋めて 行く形でもできるのかな、とも思いましたが、こちらも具体的にマクロにできません。 特に処理スピードにこだわるわけではないですが、あとあと見返して勉強およびメンテできるような、 シンプルなカタチ(1行にコマンドを詰め込んだ複雑な形ではなく)にしていただけると助かります。 どうぞご教授いただけませんでしょうか。 よろしくお願いいたします。

  • エクセルで条件に合わせて複数データを抽出したい

    シート1に基本データ(基データ)があり、シート2のセル内に条件を入れて、該当のデータをシート1から引っ張りたい。 具体的には、シート1に基本データ  ナンバ- 1 1 2 2 2 3 4 4 4  該当データ A B C D E F G H I シート2に 条件内容 1を入れてA B (複数データ)      2を入れてC D E       3を入れてF -----と、こんな具合になりたいのですが?   VLOOKUP は複数の抽出なので駄目でした。   

  • 「エクセルでのデータ検索」について

    「エクセルでのデータ検索」について 基本的な質問ですいません。 エクセルで、以下のようなことをしたいのですが・・・ 【シートA】   A  B  C  D E 1   ○ △ □ ◇ 2 あ ※ ※ ※ ※ 3 い ※ ※ ※ ※ 4 う ※ ※ ※ ※ (※は任意の数値) このとき、【シートB】に以下のように「◇」「う」と入力すると “B2”欄に【シートA】の“E4”(=「◇」と「う」の交差する位置) の値が出るようにしたいのです。  【シートB】   A  B  C  D E 1   ◇ 2 う 3 4   ちなみに【シートB】に入力する値はその都度変わるので、VLOOKUPや INDEXではうまくいきませんでした。 実際は長めのマクロで行っている作業の内の一部ですので、「関数」でも 「マクロ」でも、どちらでも対応できます。 ご教示のほど、よろしくお願いいたします。   

  • エクセル 複数の条件?

    お世話になります。エクセル2007です。 商品の卸値を決めるのに複数の工程別単価シートから参照して計算してだそうとしてます。 卸値=(A工程の単価 + B工程の単価) * 自社マージンかけ率 例えば、A工程のX社、Y社、Z社の納品書のシートを コピーしてまとめてA工程単価シートをつくり、商品単価の入るシートにVLOOKUPで、よびだしています。 今まではA工程だけだったのですが、B工程も計算したいと思ったのですが、うまくつくれません。     A    B    C     D            E  1 卸値  数量  売上 A工程単価    B工程単価 今までの式はA1に =(IF(ISERROR(D1),0,ROUNDDOWN((D1*10/7.5),-1))) で、 常に総売り上げや平均卸値などを もだしたいので エラーを0にして総売上は =SUM(C:C)のように 計算しています。 A工程はあるけれど、B工程はない仕事もあり、 場合には C1のB工程のセルにエラーが出てしまいますが、 複数の条件でどういった式をいれればいいのかわかりません。 D1にデータがありE1がエラーのときはB1のA工程だけの単価で計算したいです。 B工程だけのときはありえないので、エラーでOKです。 もっとシンプルに質問できたかもしれませんが いろいろ書いてしまいました。すみません。 どうぞよろしくお願いします。

  • EXCELを使ってデータ抽出の方法

    二つのシートから、品番の違うものを抽出したいのです。たとえば: シート1に 品番 A-654565-005-2 B-789456-003-4 C-258369-001-3 E-357689-009-9 D-147258-004-4 d-147258-005-5 usp-3690258-006-8 usp-3690258-006-8 シート2に 品番 A-654565-005-2 B-789456-003-4 C-258369-001-3 d-147258-005-5 があります。シート1とシート2と比べると、「usp-3690258-006-8」のような品番がないのです。そのようなもの(シート2にないもの)を全部シート3に抽出したいのです。やり方を教えてください。よろしくお願いします。

  • エクセルのデータ照合

    AとB2つのエクセルシートがあって、Aのシートのデータが Bのシートにもあるかどうかを調べる時どのようにすればいいのでしょうか? 例えば・・・、 <シートA>    A  B C D E F G <シートB> A B H I というエクセルデータがあって、シートBのデータがシートAにあるか どうか(AとBはあるのでYES、HIはないのでNO)など一発で 検索する方法を教えていただけないでしょうか? 宜しくお願いします。

  • 【エクセル】別シートの元データを、分類方法を変えて集計する方法

    シートA(集計元データ)を、シートB(集計表)に、Bの分類条件にあったデータを検索かつ集計する方法を教えてください。 ○シートA)集計元データの様式 (列a)大分類/条件1、(b)中分類/条件2、(c)小分類/条件3、(d)データ(1)、(e)データ(2)  ↓ ○シートB)集計表の様式 (列a)条件2、(b)条件3、(c)データ(1)、(d)データ(2) ○その他 ※シートA(元データ)の条件(1~3)に該当する内容は、集計期間により変動する(様式は変わらない)が、集計表の様式・条件(2~3)・条件に該当する内容は固定なので、シートAから該当するデータを検索して、シートBに集計しなければならない。 ※シートBでは、集計元データ大分類(条件1)を表記せず、条件2・3から表記するため、その分、データの集計が必要となる。 条件が2列に分かれているためSUMIFが使えず、DSUM・SUMPRODUT・DSUM等など、素人なりに調べて試してみましたが、どうしてもできません。できない理由も含めて、教えていただければと思います。 内容がわかりにくいと思いますが、どうかよろしくお願いいたします。

  • VBAで複数条件検索どうすればよいですか?

    【Sheet1】 発注日   品番    ロットNo      納品日   A     B      C          D 1 3/11  553  111-111-1111   3/17 2 3/11  123  222-222-2222 3 3/11  223  333-333-3333 4 3/12  123  444-444-4444   3/17 5 3/12  553  555-555-5555 【Sheet2】  納品日  品番   ロットNo    A    B     C 1  3/17  553  111-111-1111 2  3/17  123  444-444-4444 3  3/17  223  666-666-6666 エクセル2010・VBAで、【Sheet2】の品番とロットNoの条件に合う行を【Sheet1】より探し、【Sheet1】D列に納品日を入力し、その行のロットNoを明るい緑で塗りつぶす。 【Sheet2】の条件が【Sheet1】にないなら【Sheet2】の行のロットNoを、赤で塗りつぶす。 【Sheet1】は発注リスト、【Sheet2】は納品リストになります。 納品日は検索した日の日付になります。 Findを使い試行錯誤しましたが、思うように動かず、スキル不足で困っています。どなたか、ご教授願います。宜しくお願い致します。

  • マスタシートと同じデータがあれば横にデータを貼り付けていく。

    シート1の品番を基準にし、シート2に同じ品番があればシート1の品番とデータの横にシート2のデータを貼り付けていく。次にシート3に移り繰り返し。 (シート1) | A | B | C | D 1 | 1a| 1 | 9 | 2 2 | 2a| 4 | 7 | 1  ・  ・  ・ A列に品番、B列に枚数、C列に最高数、D列に最低数が入ってます。 (シート2) | A | B | C | D 1 | 1a| 2 | 8 | 1 2 | 3a| 3 | 5 | 3 ・  ・  ・ シート1と同じ形式です。 (シート1)↓こうしたいです。 | A | B | C | D | E | F | G | 1 | 1a| 1 | 9 | 2 | 2 | 8 | 1 | 2 | 2a| 4 | 7 | 1 | A列の品番と同じであればその横(列)に枚数、最高数、最低数のデータを貼り付けていきたいのです。 シート数とデータ数はその時々により減ったり増えたりと変化します。 エクセル2000です。 わかる方、よろしくお願いします。