こんにちは、
先日、「作りながら覚える! excel vba マクロ 組み方講座 永井善王著」という本を購入してvbaマクロを勉強中です。
本にそって進めていくと、P.122の所でストップしてしまいました。
急に「実行時エラー13 型が一致しません」と表示され、何回やりなおしてもそこから進めなくなりました。
コードは、
Sub DBシートから当月分シートを作成する()
Dim 開始年月日 As Long
Dim 終了年月日 As Long
開始年月日 = ">=" & Worksheets("年月日入力").Range("D4")
終了年月日 = "<=" & Worksheets("年月日入力").Range("D5")
ChDir "C:\ときめき"
Workbooks.Open Filename:="C:\ときめき\売上DB.xls"
Sheets("当月分").Select
Cells.Select
Selection.Clear
Sheets("DB").Select
Range("A2").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=開始年月日, _
Operator:=xlAnd, Criteria2:=終了年月日
Selection.CurrentRegion.Select
Selection.Copy
Sheets("当月分").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("DB").Select
Application.CutCopyMode = False
Selection.AutoFilter
Sheets("住所録").Select
ActiveWorkbook.Save
ActiveWindow.Close
End Sub
になります。
3行目の
開始年月日 = ">=" & Worksheets("年月日入力").Range("D4")
が黄色くなっています。
(なぜかこの本では、Dim As Long での変数定義がされておらず、そこは自分で入れています。)
現在本に沿って勉強しているところですが、詰まってしまいお手上げの状態です。
どうぞ助けてくださいませ。
No.7ベストアンサー
- 回答日時:
>開始年月日 = ">=" & Worksheets("年月日入力").Range("D4")
セルD4には日付が入っているとして
これでなぜエラーが出るかというと、
右辺
">=" & Worksheets("年月日入力").Range("D4")
これではセルD4は日付(数値)ですが、先頭の">="が文字列ですから
例えば、
">=2009/5/28"
のように●文字列●が作成される
一方代入される左辺の変数(開始年月日)は、Long型の数値
で、数値型に文字列は代入できないのでエラーが出るわけです。
よって、string型にするか
Dim 開始年月日 As String
Dim 終了年月日 As String
Variant型にしなけばいけません
Dim 開始年月日 As Variant
Dim 終了年月日 As Variant
Variant型の場合は、As Variantを省いてもOK
ご回答ありがとうございます。
大変勉強になりました、 String で解決いたしました。
また、Variantでも省略でもいけました。
ありがとうございました。
大変わかりやすい説明ありがとうございました。
勉強中の私は、本書に沿って四苦八苦しておりますががんばりたいと思います。
ありがとうございました
No.8
- 回答日時:
こんにちは。
>(なぜかこの本では、Dim As Long での変数定義がされておらず、そこは自分で入れています。)
あるレベルまでは、変数の定義をきっちり決めるようなことをすると、さっぱり分からなくなります。(正しくは、Dim As String)
データ型は、避けていると一向に上達はしませんが、コツがありますから、あるレベルまでは、データ型を入れるということは絶対的ではありません。
質問のコードとしては、ちょっと、この先に進めていくのは厳しいですね。理由は、その手のワークシートのコーディングは、「記録マクロ」で作ったほうがよいのです。
私は、かねがね思っているのはワークシートの操作は、意外に難しいのです。Range オブジェクト・Cells プロパティ、Sheets オブジェクト・Worksheets オブジェクト、Windows オブジェクト・Workbooks オブジェクト と、同じようなものがいくつも出てきます。それをどう扱ってよいのか分かりにくいので、本来は、その中のひとつを、それぞれ選んでコードを書かないと、いつまでも、あやふやなコードになってしまいます。
ご質問のようなコードは、もしも、教本にあるのなら、もう少し先から進めたほうがよいです。それをやっていると、いつまでも、堂々巡りになってしまいます。
もちろん、
# 開始年月日 = ">=" & Worksheets("年月日入力").Range("D4")
# 終了年月日 = "<=" & Worksheets("年月日入力").Range("D5")
の
開始年月日, 終了年月日 の変数のデータ型は、String 型ではあるのですが、以下の部分が、コアになりますから、その部分が分かっていないと全体がボケてしまいます。
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=開始年月日, _
Operator:=xlAnd, Criteria2:=終了年月日
「開始年月日」は、文字列です。
それと、この辺りは、微妙にバージョンに影響する部分ですから、私が教える立場なら、できるなら避けたいのです。
Worksheets("年月日入力").Range("D4")
これは、暗黙のプロパティですから、見かけ上は、日付型で出てきますが、実際は数値と同じです。String 型としては、数値だけになってしまいます。だから、Excel2000では、マクロでやると、何度やってもうまくいきません。
Selection.AutoFilter Field:=1, Criteria1:=">=5月24日"
このようには代入されません。=">=39957" となってしまいます。
これでも、フィルターされるはずです。
煮ても焼いても食えないものとして、オートフィルターや入力規則、条件書式、Webクエリ、統合などが挙げられます。ベテランの人でも、入門者でも、ここらは、ほとんど技術的に違いが現れません。
テキストの P.122 というと、本の中ごろでしょうか?VBAの「コンテナ」や「With 」の使い方というのは出ていませんか?まず、そこら辺りのテクニックを学んでから実践に移られてもよいと思います。VBAの上達の近道は、できる限りワークシートを扱わないことです。今回のような長いコードを使わずに、一行マクロ(Sub, End Sub で三行)から、進めたほうが早いようです。そうしたほうが、学習が進みます。
ご回答ありがとうございます。
大変勉強になりました、 String で解決いたしました。
本書でvba勉強をを合間をみて行っているだけで、まだまだvbaの基礎も何もわかっていないのが現状です。
今本書を用いて行っている勉強も本書にそって、なぞっているだけで確かに身になっているかといったら、?マークがつきます。
バージョンによって使用できるできないというのも正直初耳でした。
テキストのp.122は中頃ですが、コンテナ、with といったものはまだ出てきていません。
おしゃっる通り、これからどのように勉強していくか、考え直さないといけないかもしれませんが、1度はじめたものから逃げ出すのも嫌な性格なもので、とりあえず本書に沿って1つの販売管理をつくりその後、もう一度良い参考書を探し勉強していきたいと思います。
これからも、詰まってしまう所があると思いますので、お時間ありましたらまた助けて下さいませ。
ありがとうございました。
No.6
- 回答日時:
エクセルの、クライテリアに当たるものは、文字列で表現するものが多い。
その文字列を、エクセルは、プログラムコードの一部にそのまま置き変える(はめ込む間に)のだと想像します。関数でも例えばCOUNTIFの第2引数でも、>70でなく、">70"と文字列の例があります。
そういう例で
Dim 開始年月日 As Long
は正しくは Stringです。&で演算子文字列と結合してるじゃないですか。
>開始年月日 = ">=" & Worksheets("年月日入力").Range("D4")
としています。
&は文字列結合に使うものです。
これを勝手に入れたのが原因かも知れません。
永井先生の本にしては、マクロの記録みたいで、スマートじゃないが、ほんとにこの通り、本位載ってましたか。
ご回答ありがとうございます。
大変勉強になりました、 String で解決いたしました。
ありがとうございました。
本書には、確かに
>開始年月日 = ">=" & Worksheets("年月日入力").Range("D4")
との記載がありました。
勉強中の私は、本書に沿って四苦八苦しております。
ありがとうございました
No.5
- 回答日時:
「開始年月日」と「終了年月日」はオートフィルタの抽出条件に使って居ますからLongではなくStringにしないと駄目ですね。
Dim 開始年月日 As Long
Dim 終了年月日 As Long
をLong→String で試して見てください。
No.4
- 回答日時:
変数定義をご自分でされたようですが、
「Sub DBシートから当月分シートを作成する()」の外に既に定義されていませんでしたか?
他の部分でも「開始年月日」「終了年月日」が必要になる場合、
Dimではなく、PrivateやPublicなどの広範囲で定義する場合があります。
確認してみてください。
ご回答ありがとうございます。
大変勉強になりました、 String で解決いたしました。
大変わかりやすい説明ありがとうございました。
勉強中の私は、本書に沿って四苦八苦しておりますががんばりたいと思います。
ありがとうございました
No.3
- 回答日時:
VBAは変数を定義しないでも動きますからね。
私もこの程度の長さのVBAコードなら、変数定義なんぞしません。
ちゃんとユーザに納品するモノならoption宣言して定義しますが。
・・・それはともかく。
開始年月日 = ">=" & Worksheets("年月日入力").Range("D4")
これ、右側が変換しきれないデータなんじゃないですか? ステップ
実行で「?Worksheets("年月日入力").Range("D4")」をイミディエイト
ウインドウでチェックしてみてください。
素直に数字が出てきたら、Cstr(Worksheets("年月日入力").Range("D4"))
と書き換えれば動くはずです。出てこないなら、"年月日入力"という
シートがあるか確認したほうがいいかもです。ひょっとしてSheets("sheet1")
で済む話だったりして・・・。結構「シート名設定ミス」ってあるんですよね。
ご回答ありがとうございます。
そうですか、普通はこれぐらいだと変数定義しないものなんですね。自分の勉強不足の所も多々ありました。
解決いたしました。ありがとうございました。
開始年月日 = ">=" & Worksheets("年月日入力").Range("D4")
は、右側も変換できました。
本書の通り年月日というシートを作成いたしました。
わからない所だらけなのでご指摘ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) excelVBAについて。 4 2022/11/21 16:15
- Excel(エクセル) ExcelVBAについて。 2 2022/12/10 20:08
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Visual Basic(VBA) Sheet2の日付をキーにオートフィルターで2023年1月のデータを抽出し、Sheet3へ書き出すた 2 2023/03/06 23:57
- Visual Basic(VBA) excelVBAについて。 1 2022/11/30 06:16
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
「出身中学と出身高校が混ざったような校舎にいる夢を見る」「まぶたがピクピクしてるので鏡で確認しようとしたらピクピクが止まってしまう」など、 これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
-
【選手権お題その2】この漫画の2コマ目を考えてください
サッカーのワンシーンを切り取った1コマ目。果たして2コマ目にはどんな展開になるのか教えてください。
-
エクセルエラー13型が一致しませんの直し方教えて下さい。
その他(Microsoft Office)
-
昨日まで動いていたエクセルのマクロが急に動かなくなりました
Excel(エクセル)
-
エクセル 「実行時エラー13":型が一致しません。」エラーについて"
Excel(エクセル)
-
-
4
エクセル2016でfilter関数がないので、、抜き出す関数をおしえてください。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの条件付き書式のコピーと...
-
至急お願いいたします 屋上の備...
-
Excel について教えてください。
-
エクセルで、数字の下4桁の0を...
-
Excelの開始ブックを固定したい...
-
エクセルで、数字ではない値(...
-
ファイル名の変更
-
エクセルでセルに入力する前は...
-
Excelで項目の種類ごとに番号を...
-
1.5ヶ月分の費用按分 エクセル関数
-
vba Excelのタブをプログラムか...
-
エクセルシートの作成(関数)...
-
Excelのデータの入力規則の問題...
-
【VBA】使ってたクエリの接続を...
-
45490がどうして
-
【Excel】 1つのセルの日にちを...
-
エクセルで80万行、50列位のデ...
-
エクセルでデータを消して保存...
-
=INDIRECT(RIGHT(CELL("filenam...
-
Excel for MacでFEPが勝手に切...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excel vba で 実行時エラー13...
-
パソコンに詳しい方教えて下さ...
-
Windows上のファイル操作の履歴...
-
TCP/IP のパケットの分断と結合...
-
Outlookの「受信日時」「件名」...
-
バッチファイルでディレクトリ...
-
Zipファイルをエクセルに指定変...
-
ipadで社内ネットワークに接続
-
Outlookの「受信日時」「送信者...
-
Lhaplusが発したと、みられるエ...
-
指定ファイルをFTPで自動アップ...
-
別のフォルダにファイルを移動...
-
シリアル通信時のデータ受信方法
-
sftp時の公開鍵認証
-
UDP受信時の通信異常検知について
-
C#にてCTI。RS232Cの受信と送信...
-
複数のテキストファイルの特定...
-
グローバルIPアドレスを取得し...
-
どうしたらいいか教えて下さい。
-
CSVファイルのマッピング処理の...
おすすめ情報