Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8669 / 13646 ツリー ←次へ | 前へ→

【31860】【至急】MATCH関数の範囲 eki 05/12/1(木) 13:47 質問[未読]
【31861】Re:【至急】MATCH関数の範囲 けんた 05/12/1(木) 14:33 回答[未読]
【31862】Re:【至急】MATCH関数の範囲 Kein 05/12/1(木) 14:49 回答[未読]
【31864】Re:【至急】MATCH関数の範囲 やま 05/12/1(木) 15:47 回答[未読]
【31865】Re:【至急】MATCH関数の範囲 eki 05/12/1(木) 15:53 お礼[未読]
【31866】Re:【至急】MATCH関数の範囲 やま 05/12/1(木) 15:57 発言[未読]
【31868】Re:【至急】MATCH関数の範囲 eki 05/12/1(木) 16:41 お礼[未読]
【31869】Re:【至急】MATCH関数の範囲 Jaka 05/12/1(木) 17:02 回答[未読]
【31876】Re:【至急】MATCH関数の範囲 bykin 05/12/1(木) 19:02 回答[未読]
【31921】Re:【至急】MATCH関数の範囲 eki 05/12/2(金) 12:35 お礼[未読]

【31860】【至急】MATCH関数の範囲
質問  eki  - 05/12/1(木) 13:47 -

引用なし
パスワード
   こんにちは。
いつもこちらの掲示板には大変お世話になっております。
今回大急ぎで解決しなければならない問題がありますので
皆さまのお知恵を拝借できれば大変助かります。
以下のようなデータ(行番号列番号省略)
がありまして、結果の3行目が1となっておりますが、
4とする方法はないかと思っています。
一度結果を出したらそれは無視して次から検索を
開始するという方法はありますでしょうか?

100    100    =MATCH(B1,$A$1:$A$7,0) 結果 1
200    200    =MATCH(B2,$A$1:$A$7,0) 結果 2
5    100    =MATCH(B3,$A$1:$A$7,0) 結果 1
100    6    =MATCH(B3,$A$1:$A$7,0) 結果 5
6    
100    
200    

アドバイスをいただけたら大変助かります。
どうかお願い致します。

【31861】Re:【至急】MATCH関数の範囲
回答  けんた  - 05/12/1(木) 14:33 -

引用なし
パスワード
   ▼eki さん:
>一度結果を出したらそれは無視して次から検索を
>開始するという方法はありますでしょうか?

MATCH関数の範囲をVBAで変化させればよいのではないでしょうか?
時間的に手遅れでないことを祈って。

【31862】Re:【至急】MATCH関数の範囲
回答  Kein  - 05/12/1(木) 14:49 -

引用なし
パスワード
   B列の値を並べ替えるとして、以下のようなコードで C列に行番号を返すことが
できます。

Sub Test_GetRow()
  Dim i As Long
  Dim MyR As Range, C As Range
  Dim FR As Range, D As Range
 
  Application.ScreenUpdating = False
  Range("B1", Range("B65536").End(xlUp)).Sort Key1:=Columns(2), _
  Order1:=xlAscending, Header:=xlNo, Orientation:=xlSortColumns
  For i = Range("B65536").End(xlUp).Row To 2 Step -1
   If Cells(i, 2).Value <> Cells(i - 1, 2).Value Then
     Cells(i, 2).Insert xlShiftDown
   End If
  Next i
  Set MyR = Range("B:B").SpecialCells(2)
  For Each C In MyR.Areas
   If C.Count = 1 Then
     C.Offset(, 1).Value = _
     Application.Match(C.Value, Range("A:A"), 0)
   Else
     Set FR = Range("A:A") _
     .Find(C.Cells(1).Value, , xlValues, , , xlPrevious)
     For Each D In C.Offset(, 1)
      Set FR = Range("A:A").FindNext(FR)
      D.Value = FR.Row
     Next
     Set FR = Nothing
   End If
  Next
  Set MyR = Nothing
  Intersect(Range("B1", Range("B65536").End(xlUp)).SpecialCells(4) _
  .EntireRow, Range("B:C")).Delete xlShiftUp
  Application.ScreenUpdating = True
End Sub

【31864】Re:【至急】MATCH関数の範囲
回答  やま  - 05/12/1(木) 15:47 -

引用なし
パスワード
   こんな感じかな。


Sub sample()

  Dim i As Long
  Dim j As Long
  
  Columns("C:D").Select
  Selection.ClearContents

  For i = 1 To Cells(Rows.Count, 2).End(xlUp).Row
    For j = 1 To Cells(Rows.Count, 1).End(xlUp).Row
      Cells(j, 1).Activate
      If Cells(i, 2) = Cells(j, 1) And Not (Cells(j, 4) = 1) Then
       Cells(i, 3).Value = Replace(ActiveCell.Address, "$A$", "")
       Cells(j, 4).Value = 1
       Exit For
      End If
    Next j
  Next i

  Columns("D").Select
  Selection.ClearContents

End Sub

【31865】Re:【至急】MATCH関数の範囲
お礼  eki  - 05/12/1(木) 15:53 -

引用なし
パスワード
   ▼回答頂いた皆さま

個別にお礼を申し上げなくてはならないところ、
取り急ぎ、まとめてお礼申し上させていただくこと
お許しください。

ワークシート関数で完結することはむりでしょうか?

もし、できるという方がいらっしゃいましたら
アドバイスいただけると大変助かります。

【31866】Re:【至急】MATCH関数の範囲
発言  やま  - 05/12/1(木) 15:57 -

引用なし
パスワード
   ▼eki さん:

お疲れ様です。

MATCHした行を、その都度保持する必要があるため、無理っぽいです。
VLOOKUPとMATCHを駆使して出来るかもしれませんが、VBAでコードを
書くほうが楽っぽいです。

ではでは。

【31868】Re:【至急】MATCH関数の範囲
お礼  eki  - 05/12/1(木) 16:41 -

引用なし
パスワード
   ▼やま さん:
ありがとうございます。
大変なことだけ分かれば充分です。

助かりました。

【31869】Re:【至急】MATCH関数の範囲
回答  Jaka  - 05/12/1(木) 17:02 -

引用なし
パスワード
   97だとFunctionで、Findが使えないので未検証。
もしかしたら、2000もダメかも。

セルにこんな感じで..。
=BCK(A:A,B1)

Function BCK(Col As Range, Cel As Range) As Variant
Dim CCL as range
If TypeName(Col) <> "Rnage" And TypeName(Cel) <> "Range" Then
  BCK = CVErr(xlErrValue)
  Exit Function
ElseIf Col.Columns.Count > 1 Or Cel.Count > 1 Then
  BCK = CVErr(xlErrValue)
  Exit Function
End If

With ActiveSheet.Range("A1:A" & Cel.Row)
   Set CCL = .Find(Cel.Value, , xlValue, , , xlPrevious)
End With
If CCL Is Nothing Then
  BCK = CVErr(xlErrValue)
Else
  BCK = CCL.Row
End If
End Function

【31876】Re:【至急】MATCH関数の範囲
回答  bykin  - 05/12/1(木) 19:02 -

引用なし
パスワード
   こんばんわ。

>ワークシート関数で完結することはむりでしょうか?

作業列を使ってもええんやったら、
検索範囲がA1:A20、検索値がB1:B5、
結果がC1:C5に入力されてるとして・・・

1.F1に =A1&"-1" と入れて、G1にコピーする。
2.F2に =A2&"-"&COUNTIF(OFFSET(A$1,0,0,ROW(A1)),A2)+1 と入れる。
3.F2をF3:F20とG2:G5にコピーする。
4.C1の数式を =MATCH(G1,F$1:F$20,0) に変更し、C5までコピーする。

なんてので、どーでっか?

試してみてな。
ほな。

【31921】Re:【至急】MATCH関数の範囲
お礼  eki  - 05/12/2(金) 12:35 -

引用なし
パスワード
   ▼bykin さん:

投稿者です。

すばらしいです。
どうしてこの関数で求める結果を得られたのか
私の理解力では今のところ分かりませんので
今後勉強したいと思います。

お陰さまで無事解決できましたので、大変
感謝しております。
ありがとうございました。

8669 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free