• 締切済み

エクセル VBA

エクセルVBAで以下のようなデータがあります。 D列の文字列と右隣のE列の文字列の2つが入っているものをA列から探し、見つかったセルの上にセルを追加し、E列の右隣のF列に入っている文字列を代入したいです。 どのようなプログラムになりますか?

みんなの回答

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

#1です。その後考えて、プリミチブ(初心者的)な方法=総当たり法ででも、できそうです。 2条件判定の、下記コードの If sh1.Cells(j, "D") = x(0) And sh1.Cells(j, "E") = x(1) Then の部分が可能なのを思い出したので。  他に、シートへの行挿入方法は避けた方がよいと思う。<ーーセルの上にセルを追加し 下記は、逐次的に、新しいシート(行)に所望データを作る考えです。 ーーー 例データ A2:E12 B,C列空白。 a(a) a a AA a(b) a c BB a(c) c b CC a(d) a d DD b(b) b a EE b(a) b b FF b(b) b c GG b(c) c c HH c(a) b a II c(b) c d JJ c(d) a b KK ーー 質問では、( )はカギカッコらしいが、修正して。 取り急いだため、一部は勝手に質問内容などを、当方で変えている部分があるかも。その場合は、その箇所を修正してください。 多分微修正で済む。 ーーー 標準モジュールに Sub test02() Set sh1 = Worksheets("Sheet2") '実際のシート名に変える Set sh2 = Worksheets("Sheet3") '実際のシート名に変える 当初は、空白シート '--- k = 2 Dim x As Variant lr = sh1.Range("a100000").End(xlUp).Row 'MsgBox lr '---Sh1シートの2から最終行まで繰り返し For i = 2 To 11 s = sh1.Cells(i, "A") s = Mid(s, 1, Len(s) - 1) '最後の)を削除 'MsgBox s x = Split(s, "(") '(で前後分離 MsgBox x(0) & "-" & x(1) For j = 2 To 11 '====D冽がX(0)で、且つE列がx(1)か判定=== If sh1.Cells(j, "D") = x(0) And sh1.Cells(j, "E") = x(1) Then '--本当は処理を書く MsgBox j '参考に見つかった行番号表示 sh2.Cells(k, "A") = sh1.Cells(i, "F"): k = k + 1 sh2.Cells(k, "A") = sh1.Cells(i, "A"): k = k + 1 Exit For End If Next j Next i End Sub ========= 実行結果 Sheet3 A列 AA a(a) CC a(c) DD a(d) EE b(b) FF b(a) GG b(b) HH b(c) JJ c(b) データ行が1万を超えるような場合は、処理時間が(待てないぐらいに?)どうなる、かな。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.3

以下で試してみてください。 Sub Test() Dim i As Long, j As Long For i = Cells(Rows.Count, "A").End(xlUp).Row To 1 Step -1 For j = 1 To Cells(Rows.Count, "D").End(xlUp).Row If Split(Cells(i, "A"), "[")(0) = Cells(j, "D").Value And _ Replace(Split(Cells(i, "A").Value, "[")(1), "]", "") = Cells(j, "E").Value Then Cells(i, "A").Insert Shift:=xlDown Cells(i, "A").Value = Cells(j, "F").Value Exit For End If Next Next End Sub

  • SI299792
  • ベストアンサー率47% (772/1616)
回答No.2

取りあえず関数で H1: =INDEX(A:A,ROW()/2+1)&"" H2: =IFERROR(INDEX(F:F,(CODE(H1)-65)*15+SUBSTITUTE(MID(H1,3,2),"]","")),"") 纏めて下へオートフィル。 H列にできます。 VBA が必要なら、補足股はお礼に書いて下さい。 明日になります。 股は他の人に期待して下さい。

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

質問の説明例が無機的・記号的で、したいことが、わかりにくい。 多分、まず、A列のデータで、x[Y]で、X,Yが決まりD列=x、かつE列=yの条件合致行を探すことになるのだろう。 ー こういうシート上にない、観念上のデータを対象にして、検索やフィルタをかけるのは、エクセルVBAではむつかしいと思う。SQLなどでは、D列=X,E列=yのデータを「SELECT」するのは当たり前かな、という気がするが。 だから、どこか作業列を設けて、=D2&E2のデータを作り、その作業列のデータを対象に、X&Yの値を探すのがよかろう。 しかし、作業列を使うことに抵抗するものが多い。 >どのようなプログラムになりますか? 人ごとみたいな書き方だが、自分では、どこに難しさを感じたのか?どう考えて、やってみたのか? スキルはどの程度なのか、書いておくとよい。 >該当は2つ以上現れないのかな?

関連するQ&A