• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:excelでの条件抽出がうまくいきません)

Excel2003で条件抽出がうまくいかない!

このQ&Aのポイント
  • Excel2003を使用しており、条件抽出をうまく行うことができません。
  • データを指定の条件でまとめる作業を実施していますが、上手くいかず困っています。
  • シートにまとめたいデータがあるのですが、正しく条件抽出する方法が分かりません。ご教授お願いします。

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

  • ベストアンサー
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.2

No1 です。 数式では無理がありますので、マクロにしました。 マクロも配列を利用しないと大変なので、配列を利用しました。 処理方法としては、日付・方位が違ったら配列に追加して設定しながら、同じ日付・方位がある時は 名前を結合するような処理です。 少し勉強すれば、そんなに難しくありませんので、頑張ってください。

golioshi
質問者

お礼

少し勉強すれば出来ました!有難う御座います! 苦手なことから逃げていました・・・ まだ理解できていない部分がほとんどですが・・・・ 何事もやってみることですね! また、機会がありましたら宜しくお願いいたします。

その他の回答 (1)

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.1

こんにちは。 以下のマクロでお試しください。 <マクロ貼付方法> Alt+F11 (ツール → マクロ → Visual Basic Editor) →「挿入」→「標準モジュール」で表示される画面に貼り付け 実行は、(F5を押す)又は、シート画面に戻って Alt+F8を押してマクロ一覧からマクロ名を選択して実行 Const MxCOL   As Integer = 256 Type wRC   DATE    As String   KBN     As String   NM(MxCOL) As String End Type Dim wDT()   As wRC Dim wDTcnt   As Integer ' Sub データ抽出()   Dim wI     As Long   Dim wY     As Long   Dim wR     As Long   Dim ckDT    As String   Dim fFlg    As Boolean   Dim fIdx    As Integer   '   Application.ScreenUpdating = False   ckDT = ""   Erase wDT   wDTcnt = 0   With ActiveSheet    '抽出元のデータシートをActiveにしてください     wR = .Range("A" & Rows.Count).End(xlUp).Row     For Each c In .Range("A1:A" & wR)       If ckDT = "" Then         wDTcnt = wDTcnt + 1         ReDim Preserve wDT(wDTcnt)         '         ckDT = c.Value & c.Offset(0, 1)         wDT(wDTcnt).DATE = c.Value         'A列(日付)         wDT(wDTcnt).KBN = c.Offset(0, 1)      'B列(方向)         wDT(wDTcnt).NM(1) = c.Offset(0, 2)     'C列(名前)       Else         fFlg = False         For wI = 1 To wDTcnt           If wDT(wI).DATE = c.Value And _            wDT(wI).KBN = c.Offset(0, 1) Then            fIdx = wI            fFlg = True            Exit For           End If         Next         If fFlg = False Then           wDTcnt = wDTcnt + 1           ReDim Preserve wDT(wDTcnt)           '           ckDT = c.Value & c.Offset(0, 1)     'A列(日付)           wDT(wDTcnt).DATE = c.Value       'B列(方向)           wDT(wDTcnt).KBN = c.Offset(0, 1)    'C列(名前)           fIdx = wDTcnt         End If         For wY = 1 To MxCOL           If wDT(fIdx).NM(wY) = "" Then             wDT(fIdx).NM(wY) = c.Offset(0, 2) 'C列(名前)             Exit For           End If         Next       End If     Next   End With   '   'シート(Sheet2)へ展開します   With Worksheets("Sheet2")     .Cells.ClearContents     For wI = 1 To wDTcnt       .Cells(wI, 1) = wDT(wI).DATE          '日付       .Cells(wI, 2) = wDT(wI).KBN           '方向       For wY = 1 To MxCOL               '名前         If wDT(wI).NM(wY) = "" Then           Exit For         End If         If wY = 1 Then           .Cells(wI, 3) = wDT(wI).NM(wY)         Else           .Cells(wI, 3) = .Cells(wI, 3) & "・" & wDT(wI).NM(wY)         End If       Next     Next   End With   Application.ScreenUpdating = True End Sub

golioshi
質問者

お礼

早速のご回答有難う御座います。試してみたところ、うまくいきました!有難う御座います。しかしながら、これをもとにいろいろカスタマイズしようと考えていたのですが、私には高度すぎてどこをどういじればよいのかわかりませんでした。エクセルの関数、数式で処理できるようにするにはやはり無理があるのでしょうか?せっかく教えていただいたのにすみません。

関連するQ&A