🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

6493閲覧

Find を使用した文字の検索

ice930

総合スコア99

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/01/16 02:32

表の項目の列番号を取得する為以下のコードを作成しました。

6行目の9列目から始まる項目で、6行目から8行目までがセルの結合しています。
変数「zyan」と同じ項目を探し出し、列数を求めるのが目的なのですが、「Set Rtitle = Range・・・」の所で(Northing)となってしまいます。

このコードは結合したセルには使えないのでしょうか?
アドバイスや解決策をいただきたく質問いたしました。
よろしくお願いします。

Dim Rtitle As Range Dim Coltitle As Long Dim Ecol As Long Ecol = Cells(6, Columns.Count).End(xlToLeft).Column Set Rtitle = Range(Cells(6,9),Cells(8,Ecol)).Find(zyan)'ここがNorthingです! Coltitle = Rtitle .column

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/01/16 03:03

Ecolは期待する列数を返しているでしょうか。 たとえばコード中のEcolを10という固定値に変え、ためしに6行目・8列目(結合しているので6~8行目・8列目)に変数zyanと等しい値を入れてテストしてみた場合でも、正しく動作しないのでしょうか。
guest

回答3

0

ExcelVBA

1Sub test() 2 Dim rngLeft As Range 3 Dim rngRight As Range 4 Dim rngfound As Range 5 6 Set rngLeft = Range("I6") 7 Set rngRight = Cells(6, Columns.Count).End(xlToLeft) 8 Set rngfound = Application.Range(rngLeft, rngRight).Find("e") 9 10 If rngfound Is Nothing Then 11 MsgBox "見つかりませんでした。" 12 Else 13 MsgBox rngfound.Address 14 End If 15End Sub

6行目から8行目までがセルの結合しています。

こういう場合は、6行目だけで検索します。
セルが結合されている場合は、その結合範囲の左上のセル以外は無効になっているので、
怪しい挙動をするときがあります。

上記によると、SearchOrder:=xlByColumnsを追加するとうまくいくようです。

なるほど、手動で確認しました^^面白いくせですね。
FindNextの時に応用できるかも。。。。

Findメソッドの引数は省略しない方が無難です。
省略していると、省略した部分はエクセル君がその時々で判断するので、
意図しない挙動をするときがあります。

投稿2021/01/16 08:42

mattuwan

総合スコア2163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ice930

2021/01/16 09:12

左上のセルだけで良かったんですね!! 勉強になります!
guest

0

『結合セルに対してのFind検索について』(とあもん) エクセル Excel [エクセルの学校]

上記によると、SearchOrder:=xlByColumnsを追加するとうまくいくようです。

vba

1Set Rtitle = Range(Cells(6, 9), Cells(9, Ecol)).Find("aaa", SearchOrder:=xlByColumns)

試してみたらうまくいきました。

投稿2021/01/16 04:01

hatena19

総合スコア34073

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

結合に対するFindが上手くいかないという情報はよく見かけますが、
検索範囲を全体にして、検索方向を列方向にすると上手くいく、という情報があります。

vba

1Cells.Find(What:="検索値", SearchOrder:=xlByRows)

Findメソッドで検索する際にセル結合がある場合

試すとたしかにうまくいくんですが、何故これでうまくいくのかはわからないです。しかも、指定範囲内から探したいなら使えないですね。

ためしに全体ではなく、1列だけ検索範囲を広げてやってみたら、検索できました。(xlByRows指定も無しで)

vba

1Set Rtitle = Range(Cells(6, 9), Cells(8, Ecol)).Find("aaa") 'ここがNorthingです! 23Set Rtitle = Range(Cells(6, 8), Cells(8, Ecol)).Find("aaa") ' OK 4

これでやりたい事が実現できるならそれでもいいですが、いまいちFindの動きはよ分からないですし、範囲内のセルをループで回しながらマッチングさせて探すなど、Find以外の解決も考えてみたらどうでしょうか。

投稿2021/01/16 03:51

umau

総合スコア831

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ice930

2021/01/16 09:10

範囲を広げたらうまく行きました! SearchOrder:=xlByRows について、今回利用している表では影響無い様子でした。 Findの動き気になりますね・・・。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問