こんにちは、
先日、「作りながら覚える! 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.3
- 回答日時:
VBAは変数を定義しないでも動きますからね。
私もこの程度の長さのVBAコードなら、変数定義なんぞしません。
ちゃんとユーザに納品するモノならoption宣言して定義しますが。
・・・それはともかく。
開始年月日 = ">=" & Worksheets("年月日入力").Range("D4")
これ、右側が変換しきれないデータなんじゃないですか? ステップ
実行で「?Worksheets("年月日入力").Range("D4")」をイミディエイト
ウインドウでチェックしてみてください。
素直に数字が出てきたら、Cstr(Worksheets("年月日入力").Range("D4"))
と書き換えれば動くはずです。出てこないなら、"年月日入力"という
シートがあるか確認したほうがいいかもです。ひょっとしてSheets("sheet1")
で済む話だったりして・・・。結構「シート名設定ミス」ってあるんですよね。
ご回答ありがとうございます。
そうですか、普通はこれぐらいだと変数定義しないものなんですね。自分の勉強不足の所も多々ありました。
解決いたしました。ありがとうございました。
開始年月日 = ">=" & Worksheets("年月日入力").Range("D4")
は、右側も変換できました。
本書の通り年月日というシートを作成いたしました。
わからない所だらけなのでご指摘ありがとうございました。
No.4
- 回答日時:
変数定義をご自分でされたようですが、
「Sub DBシートから当月分シートを作成する()」の外に既に定義されていませんでしたか?
他の部分でも「開始年月日」「終了年月日」が必要になる場合、
Dimではなく、PrivateやPublicなどの広範囲で定義する場合があります。
確認してみてください。
ご回答ありがとうございます。
大変勉強になりました、 String で解決いたしました。
大変わかりやすい説明ありがとうございました。
勉強中の私は、本書に沿って四苦八苦しておりますががんばりたいと思います。
ありがとうございました
No.6
- 回答日時:
エクセルの、クライテリアに当たるものは、文字列で表現するものが多い。
その文字列を、エクセルは、プログラムコードの一部にそのまま置き変える(はめ込む間に)のだと想像します。関数でも例えばCOUNTIFの第2引数でも、>70でなく、">70"と文字列の例があります。
そういう例で
Dim 開始年月日 As Long
は正しくは Stringです。&で演算子文字列と結合してるじゃないですか。
>開始年月日 = ">=" & Worksheets("年月日入力").Range("D4")
としています。
&は文字列結合に使うものです。
これを勝手に入れたのが原因かも知れません。
永井先生の本にしては、マクロの記録みたいで、スマートじゃないが、ほんとにこの通り、本位載ってましたか。
ご回答ありがとうございます。
大変勉強になりました、 String で解決いたしました。
ありがとうございました。
本書には、確かに
>開始年月日 = ">=" & Worksheets("年月日入力").Range("D4")
との記載がありました。
勉強中の私は、本書に沿って四苦八苦しております。
ありがとうございました
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つの販売管理をつくりその後、もう一度良い参考書を探し勉強していきたいと思います。
これからも、詰まってしまう所があると思いますので、お時間ありましたらまた助けて下さいませ。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
高校生はアルバイトするべきだろうか?賛成だったら「賛」、否定だったら「否」を文頭においてあなたの意見を教えてください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
エクセルエラー13型が一致しませんの直し方教えて下さい。
その他(Microsoft Office)
-
ExcelのVBAでエラー13が出てしまいます。(泣き)
Excel(エクセル)
-
昨日まで動いていたエクセルのマクロが急に動かなくなりました
Excel(エクセル)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
今まで文字化けなく開けていたc...
-
スプレッドシートで指定された...
-
ExcelでASCを使って全角を半角...
-
マクロの処理が遅くなった
-
Excel関数について教えてくださ...
-
作成した数式を値として表示し...
-
エクセルの質問です。 F列からL...
-
エクセルでファイルの最終更新...
-
EXCELの散布図で日付が1900年に...
-
【マクロ】VLOOKUPにて参照元に...
-
エクセルのセル内に分数などの...
-
Excelの警告について
-
Microsoft 365Excelの見開きペ...
-
Excel関数について教えてくださ...
-
シートの情報を別のシートへま...
-
Excelマクロで空白セルを詰めて...
-
【マクロ】フォルダ内にあるPDF...
-
index関数の説明をお願いします。
-
重複しない値を取り出したい
-
エクセルの数式バーのフォント...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excel vba で 実行時エラー13...
-
[条件付き書式]について、
-
パソコンに詳しい方教えて下さ...
-
Windows上のファイル操作の履歴...
-
Outlookの「受信日時」「件名」...
-
TCP/IP のパケットの分断と結合...
-
バッチファイルでディレクトリ...
-
指定ファイルをFTPで自動アップ...
-
Zipファイルをエクセルに指定変...
-
別のフォルダにファイルを移動...
-
UDP受信時の通信異常検知について
-
sftp時の公開鍵認証
-
ARCserveの復元方法
-
ipadで社内ネットワークに接続
-
シリアル通信時のデータ受信方法
-
Outlookの「受信日時」「送信者...
-
PC98で232c送信winndowで受信で...
-
Lhaplusが発したと、みられるエ...
-
java.lang.NumberFormatExcepti...
-
ネットワークでの受信バイト数
おすすめ情報