
No.4ベストアンサー
- 回答日時:
No1です。
>VBA エラー 91「~~」が出てしまいます。
ご質問の本文では別ブックのような記述になっていますが、補足でご提示のコードは同一シート内で検索しているものと考えても良いのでしょうか?
(そうでない場合は、問題点がいろいろとありすぎますので・・)
推測するところ、エラーが出た時にエディター画面を見ると、
>SarchRow = FindCell.Row
の行が黄色く反転していませんか?
そのままウォッチウィンドウに、Findcellの内容を表示させてみると、値がNothingになっていませんか?
もしそうなら、Findメソッドで検索がヒットしなくて、『 FindCell.Row と言われても、そんなのないよ』というエラーです。
通常、Findメソッドの結果を扱う時は、
IF FindCell is Nothing Thne ~~ Else ~~
のようにしておく方が安全です。
『同じ日付があるんだから、検索で見つからないなんてのが、そもそもおかしい‼』とおっしゃりそうですが、実は、日付をFindで検索する場合はちょっとだけ面倒なんです。
(他の方法で検索するのなら、あまり問題は起きないのですが・・)
ひとまず、おまじないとして、
Set FindCell = Range("A1:A13").Find(test.Text, LookIn:=xlValues, LookAt:=xlWhole)
に変えて、試してみてください。
これで、ちゃんと行番号が表示されたりしませんか?
詳しい説明は長くなるので、以下をご覧になるのが宜しいかと。
http://officetanaka.net/excel/vba/tips/tips131c. …
No.3
- 回答日時:
Find メソッドって癖が強いんです。
・前回検索(ワークシート上の操作、VBA問わず)の検オプションがそのまま継続適用される
・日付の検索は表示形式を完全に一致された検索キーワードでなければならない
(回答はこれ)
などで注意が必要。
特に2番目の点はVBAの入門者の頭を悩ませることになります。
Set test = Range("I5")
Set FindCell = Range("A1:A13").Find(test, LookIn:=xlValues, LookAt:=xlWhole)
ここでFind の検索キーワードを指定しているオブジェクト変数 test ですが、Range 型なのでディフォルトプロパティの
test.Value
と解釈され、つまりはシリアル値(44621みたいな数値)で検索してます。
ですが、Find は検索範囲のセルの値をいちいちシリアル値かな?と評価してまで検索してません。あくまで
7月7日
7月8日
といった現在セルに表示されている値を検索しています。結果、そんなデータありません、となります。
Range("A1:A13").Find("7月8日", LookIn:=xlValues, LookAt:=xlWhole)
だと上手くいきませんか?
ここが特に面倒な点。
代替案でシリアル値で検索したいなら
worksheetfunction.match
を使うと良いでしょう。
ただし、matchはmatchで検索できる最大要素数が限られています。
簡単に言うと、Excel2013以降改善はされましたが、データの行数が数十万件を超えてくるとエラーまたは意図しない値を返します。
No.2
- 回答日時:
こんにちは。
例えば、各店舗の売上報告を本店で全店売上として集計したい、といったケースであるならば、オススメの方向性は次の通り。
・入力フォーマットは全ての店舗で同一である
・店舗名列がある。なければ設ける。
データを集計シートに統合した後でも店舗名列のオートフィルターで店舗ごとの抽出可能
としたら、2のデータを1の集計シートの最後に丸ごとコピーして付け足していきます。
つまり、7/7の全店売上といった集計は、後からピポットテーブルなどの機能で行います。
ご質問文のとおり、VBAで書くことはできるのですが面倒な点(例えば日付の検索は少々コツが必要です)がありますし、後々データ構造に問題を残しそうです。1つ指摘するなら、集計値しか分からない場合、異常値がどの店舗のものか原因調査に手間がかかります。
異なるブック データ統合
といったキーワードでサンプルソースは見つかると思います。
No.1
- 回答日時:
こんにちは
>どのように行番号を取得したりその行に値を入れることができるのか
検索してみましょう。
◇行番号を取得
https://www.tipsfound.com/vba/08003
◇セルに値を入れる
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/p …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/20 10:00
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/20 14:46
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/01/26 12:00
- Excel(エクセル) Excelのマクロコードについて教えてください。 1 2022/03/27 10:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/17 11:59
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/01/27 13:15
このQ&Aを見た人はこんなQ&Aも見ています
-
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
エクセルのVBAで日付を検索し転機したい
Visual Basic(VBA)
-
-
4
今日の日付が入った行のデータを取得するマクロ
Excel(エクセル)
-
5
VBA データ(特定値)のある最終行を取得したい
Excel(エクセル)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
VBAでEmpty値って何ですか?
Excel(エクセル)
-
8
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
9
【VBA】2つのシートの値を比較して条件一致したら、同じ行の隣の値を別ブックへ転記したいです。 VB
Visual Basic(VBA)
-
10
Excel VBA 空白セルがあったらメッセージボックスで知らせたい
Visual Basic(VBA)
-
11
B列の最終行までA列をオートフィル
Visual Basic(VBA)
-
12
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
13
Rangeメソッドは失敗しました。globalオブジェクトについて
Excel(エクセル)
-
14
別ブックをダイアログボックスで指定してそこにあるシートをコピーしたい
Excel(エクセル)
-
15
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
16
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
17
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
18
別のシートから値を取得するとき
Visual Basic(VBA)
-
19
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
20
エクセルシート内のある数値以上の最初のセルを検索したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別ブックをダイアログボックス...
-
VBA シートをコピーする際に Co...
-
VBAで別ブックのシートを指定し...
-
Excelマクロ 該当する値の行番...
-
エクセルVBAが途中で止まります
-
【Excel VBA】書き込み先ブック...
-
VBAで別のブックにシートをコピ...
-
VBA 別ブックからコピペしたい...
-
ワイルドカード「*」を使うとう...
-
【ExcelVBA】インデックスが有...
-
エクセル VBA 他シートの行を選...
-
VBA コードを実行すると画面が...
-
シートをコピーする下記記述で...
-
Excel にて、 リストボックスの...
-
VBAで複数のブックを開かずに処...
-
[Excel]ADODBでNull変換されて...
-
VBA 実行時エラー 2147024893
-
エクセル共有化のトラブル
-
フォルダ内の全てのファイルに...
-
拡張メタファイルにて貼り付け
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
VBA 別ブックからコピペしたい...
-
別ブックをダイアログボックス...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
【Excel VBA】書き込み先ブック...
-
VBAで別ブックのシートを指定し...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBAで別のブックにシートをコピ...
-
VBA コードを実行すると画面が...
-
Excel2007VBAファイルの表示に...
-
VBAで複数のブックを開かずに処...
-
[Excel]ADODBでNull変換されて...
-
Excelファイルを開くとき、読み...
-
VBA 実行時エラー 2147024893
-
Excelマクロ 該当する値の行番...
-
Excel にて、 リストボックスの...
-
VBS Bookを閉じるコード
-
複数のエクセルファイルとシー...
-
【ExcelVBA】インデックスが有...
おすすめ情報
例えば、セル("I5")の値である"7月8日"を、A列から検索して、一致する行番号(ここでの表でいう11行目)を取得する方法を知りたいです。以下のようにマクロを組んでみましたが、VBA エラー 91「オブジェクト変数またはWithブロック変数が設定されていません。」が出てしまいます。VBAにお詳しい方、是非ともご教示願います。
Sub macro1()
Dim test
Dim FindCell As Range
Dim SarchRow As Long
Set test = Range("I5")
Set FindCell = Range("A1:A13").Find(test, LookIn:=xlValues, LookAt:=xlWhole)
SarchRow = FindCell.Row
MsgBox (SarchRow)
End Sub