Excel VBA質問箱 IV

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

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


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

【54484】フィルターオプションでの行No取得 tomi 08/3/15(土) 10:33 質問[未読]
【54491】Re:フィルターオプションでの行No取得 りん 08/3/15(土) 16:21 回答[未読]
【54493】Re:フィルターオプションでの行No取得 tomi 08/3/15(土) 18:06 質問[未読]
【54494】Re:フィルターオプションでの行No取得 Hirofumi 08/3/15(土) 18:46 回答[未読]
【54500】Re:フィルターオプションでの行No取得 tomi 08/3/16(日) 5:14 お礼[未読]

【54484】フィルターオプションでの行No取得
質問  tomi  - 08/3/15(土) 10:33 -

引用なし
パスワード
   よろしくお願いします。
.Range("B1:H500000").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= .Range("C1000000:H1000001"), CopyToRange:=.Range("B1000010:H1000010"), Unique :=True
上記のプログラムでフィルターオプションを使ってデータの取得は完成
しています。
 質問は取得したデータのある行Noを取得したいと思っています。
 
 現在は一列追加してそこに行Noと同じ番号を入力して行Noを取得していますが、
 行削除とかをされると行Noがずれてしまいます。
 そこでデータのある行Noを自動的に取得できないかと思いまして、質問をさせて
 頂きました。

【54491】Re:フィルターオプションでの行No取得
回答  りん E-MAIL  - 08/3/15(土) 16:21 -

引用なし
パスワード
   tomi さん、こんにちわ。

> .Range("B1:H500000").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= .Range("C1000000:H1000001"), CopyToRange:=.Range("B1000010:H1000010"), Unique :=True
> 質問は取得したデータのある行Noを取得したいと思っています。
XL2007ですねw

AdvancedFilterで"CopyToRange"で指定した範囲は、フィルタ時に『Extract』という名前がつく(数式リボンの「定義された名前」で確認できます)のでこれを利用しました。

Sub Macro1()
  With Application.ActiveSheet
   '抽出
   MsgBox .Names("Extract").RefersToLocal, vbInformation, "CopyToRange.Address"
   'データ範囲もCurrentRegionでいけるかな
   MsgBox .Names("Extract").RefersToRange.CurrentRegion.Address(external:=True), vbInformation, "Result"
  End With
End Sub

こんな感じです。

【54493】Re:フィルターオプションでの行No取得
質問  tomi  - 08/3/15(土) 18:06 -

引用なし
パスワード
   ▼りん さん:
>tomi さん、こんにちわ。
>
>> .Range("B1:H500000").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= .Range("C1000000:H1000001"), CopyToRange:=.Range("B1000010:H1000010"), Unique :=True
>> 質問は取得したデータのある行Noを取得したいと思っています。
>XL2007ですねw
>
>AdvancedFilterで"CopyToRange"で指定した範囲は、フィルタ時に『Extract』という名前がつく(数式リボンの「定義された名前」で確認できます)のでこれを利用しました。
>
>Sub Macro1()
>  With Application.ActiveSheet
>   '抽出
>   MsgBox .Names("Extract").RefersToLocal, vbInformation, "CopyToRange.Address"
>   'データ範囲もCurrentRegionでいけるかな
>   MsgBox .Names("Extract").RefersToRange.CurrentRegion.Address(external:=True), vbInformation, "Result"
>  End With
>End Sub
>
>こんな感じです。
ありがとうございました。
実行してみました。ちょっと説明不足で申し訳ありませんが、
copytoRangeにあるデータの元のデータの行Noを取得したいのです。
上記の場合はCopytoRangeの範囲を表示していました。
よろしくお願いします。

【54494】Re:フィルターオプションでの行No取得
回答  Hirofumi  - 08/3/15(土) 18:46 -

引用なし
パスワード
   >質問は取得したデータのある行Noを取得したいと思っています。

これは、元の「B1:H500000」の範囲の行番号と言う意味ですね?

> 現在は一列追加してそこに行Noと同じ番号を入力して行Noを取得していますが、
> 行削除とかをされると行Noがずれてしまいます。


だとしたら、マクロの先頭で追加した列に行番号を振り直してしまったら?
例えば、1番から振るなら、B1の行Offset値に成るし?

ただ、行番号も一緒に抽出するなら、「Unique :=True」は無意味なのでは?(遅くなるだけ?)

【54500】Re:フィルターオプションでの行No取得
お礼  tomi  - 08/3/16(日) 5:14 -

引用なし
パスワード
   ▼Hirofumi さん:
>>質問は取得したデータのある行Noを取得したいと思っています。
>
>これは、元の「B1:H500000」の範囲の行番号と言う意味ですね?
>
>> 現在は一列追加してそこに行Noと同じ番号を入力して行Noを取得していますが、
>> 行削除とかをされると行Noがずれてしまいます。
>
>
>だとしたら、マクロの先頭で追加した列に行番号を振り直してしまったら?
>例えば、1番から振るなら、B1の行Offset値に成るし?
>
>ただ、行番号も一緒に抽出するなら、「Unique :=True」は無意味なのでは?(遅くなるだけ?)
ありがとうございました。
行番号を振り直して解決しました。

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