Excel VBA質問箱 IV

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

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


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

【12184】subまたはfunctionが定義されていません。 超初心者・・・ 04/3/26(金) 1:25 質問
【12185】Re:subまたはfunctionが定義されていませ... IROC 04/3/26(金) 8:51 回答
【12192】Re:subまたはfunctionが定義されていませ... 超初心者・・・ 04/3/26(金) 12:58 お礼
【12186】Re:subまたはfunctionが定義されていません... こうちゃん 04/3/26(金) 8:52 回答
【12193】Re:subまたはfunctionが定義されていません... 超初心者・・・ 04/3/26(金) 12:59 お礼
【12198】Re:subまたはfunctionが定義されていません... こうちゃん 04/3/26(金) 14:44 回答
【12202】Re:subまたはfunctionが定義されていません... 超初心者・・・ 04/3/26(金) 15:35 お礼
【12203】Re:subまたはfunctionが定義されていませ... IROC 04/3/26(金) 15:50 回答
【12244】Re:subまたはfunctionが定義されていませ... 超初心者・・・ 04/3/28(日) 0:57 お礼
【12251】Re:subまたはfunctionが定義されていませ... IROC 04/3/28(日) 11:54 回答

【12184】subまたはfunctionが定義されていません。
質問  超初心者・・・  - 04/3/26(金) 1:25 -

引用なし
パスワード
   VBAをはじめて間もない初心者です。
いきなりつまずいてしまったのでご教示お願いします。

ユーザーフォームを作成してコマンドボタンを押したら動き出すようにしたいのですが、「コンパイルエラー subまたはFunctionが定義されていません。」というエラーメッセージが出てしまい対処方法が分かりません。

ソースは以下のようなものです。
基本的なことが分かっていないので恐縮ですが、どなたか教えてください。
お願いいたします。

Private Sub CommandButton1_Click()
  '変数の宣言
  Dim 割引日 As Variant
  Dim i As Integer
  Dim ws As Worksheets
  Dim 手形台帳 As Workbooks
  
  'テキストボックスに入力された割引日を格納
  割引日 = TextBox1.Value
  
  'エクセル画面を表示する
  Application.Visible = True
  '受取手形台帳のオープン
    Workbooks.Open "c:\受取手形台帳.xls"
  Set 手形台帳 = Workbooks("c:\受取手形台帳.xls")
  
  
  For i = 1 To 12
  Set ws = Worksheets(手形台帳(i))
      
    ws.Select
    Range("h1").AutoFilter field:=8, Criteria1:=割引日
  Nexti
 End Sub

【12185】Re:subまたはfunctionが定義されていませ...
回答  IROC  - 04/3/26(金) 8:51 -

引用なし
パスワード
   >Nexti
 ↓
 Next i


Private Sub CommandButton1_Click()
'変数の宣言
Dim 割引日 As String
Dim i As Long
Dim 手形台帳 As Workbook
 
  'テキストボックスに入力された割引日を格納
  割引日 = TextBox1.Value
 
  'エクセル画面を表示する
  Application.Visible = True
  
  '受取手形台帳のオープン
  Set 手形台帳 = Workbooks.Open("c:\受取手形台帳.xls")
    
  For i = 1 To 12
    手形台帳.Worksheets(i).Range("H1").AutoFilter field:=8, Criteria1:=割引日
  Next i
  
End Sub

【12186】Re:subまたはfunctionが定義されていませ...
回答  こうちゃん E-MAIL  - 04/3/26(金) 8:52 -

引用なし
パスワード
   超初心者・・・さん、おはようございます

>ユーザーフォームを作成してコマンドボタンを押したら動き出すようにしたいのですが、「コンパイルエラー subまたはFunctionが定義されていません。」というエラーメッセージが出てしまい対処方法が分かりません。

>  Nexti
直接の原因はこれです。
書くなら Next i です。
Nextとiがくっついていたので、関数(プロシージャ)と判断されてしまったものです。

でもそれ以外もちょっと無理がありそうです。
超初心者・・・さんが意図されたであろう形に手をいれてみたので、違いを確認しながら試してみてね。

Private Sub CommandButton_Click()
  '変数の宣言
  Dim 割引日 As Variant
  Dim i As Integer
  Dim ws As Worksheet
  Dim 手形台帳 As Workbook
 
  'テキストボックスに入力された割引日を格納
  '割引日 = TextBox1.Value
 
  'エクセル画面を表示する
  Application.Visible = True
  '受取手形台帳のオープン
  Set 手形台帳 = Workbooks.Open("c:\受取手形台帳.xls")
 
  For i = 1 To 12
    Set ws = 手形台帳.Sheets(i)
    ws.Select
    Range("h1").AutoFilter field:=8, Criteria1:=割引日
  Next i
 
End Sub

【12192】Re:subまたはfunctionが定義されていませ...
お礼  超初心者・・・ E-MAIL  - 04/3/26(金) 12:58 -

引用なし
パスワード
   IROCさんお答えいただきましてどうもありがとうございました。
仕事中のためお返事遅くなりどうもすみません。

早速実行してみたところ、「RangeクラスのAutofilterメソッドが失敗しました」と
出てしまいました・・・

これはいったいどこがいけないのでしょう?
元データの受取手形台帳がいけないのでしょうか・・・?

【12193】Re:subまたはfunctionが定義されていませ...
お礼  超初心者・・・  - 04/3/26(金) 12:59 -

引用なし
パスワード
   ▼こうちゃん さん:
>超初心者・・・さん、おはようございます
>
>>ユーザーフォームを作成してコマンドボタンを押したら動き出すようにしたいのですが、「コンパイルエラー subまたはFunctionが定義されていません。」というエラーメッセージが出てしまい対処方法が分かりません。
>
>>  Nexti
>直接の原因はこれです。
>書くなら Next i です。
>Nextとiがくっついていたので、関数(プロシージャ)と判断されてしまったものです。
>
>でもそれ以外もちょっと無理がありそうです。
>超初心者・・・さんが意図されたであろう形に手をいれてみたので、違いを確認しながら試してみてね。
>
>Private Sub CommandButton_Click()
>  '変数の宣言
>  Dim 割引日 As Variant
>  Dim i As Integer
>  Dim ws As Worksheet
>  Dim 手形台帳 As Workbook
> 
>  'テキストボックスに入力された割引日を格納
>  '割引日 = TextBox1.Value
> 
>  'エクセル画面を表示する
>  Application.Visible = True
>  '受取手形台帳のオープン
>  Set 手形台帳 = Workbooks.Open("c:\受取手形台帳.xls")
> 
>  For i = 1 To 12
>    Set ws = 手形台帳.Sheets(i)
>    ws.Select
>    Range("h1").AutoFilter field:=8, Criteria1:=割引日
>  Next i
> 
>End Sub


こうちゃんさんお答えいただきましてどうもありがとうございました。
仕事中のためお返事遅くなりどうもすみません。

早速実行してみたところ、IROCさんのもこうちゃんさんのも「RangeクラスのAutofilterメソッドが失敗しました」と
出てしまいました・・・

これはいったいどこがいけないのでしょう?
元データの受取手形台帳がいけないのでしょうか・・・?

【12198】Re:subまたはfunctionが定義されていませ...
回答  こうちゃん E-MAIL  - 04/3/26(金) 14:44 -

引用なし
パスワード
   超初心者・・・さん、こんにちは

>こうちゃんさんお答えいただきましてどうもありがとうございました。
>仕事中のためお返事遅くなりどうもすみません。
>
>早速実行してみたところ、IROCさんのもこうちゃんさんのも「RangeクラスのAutofilterメソッドが失敗しました」と
>出てしまいました・・・
>
>これはいったいどこがいけないのでしょう?
>元データの受取手形台帳がいけないのでしょうか・・・?

これは最初のエラーとは無関係ですね。
このあたりのデータと実際のセルが適合していないのでは?
field:=8, Criteria1:=割引日
例えばフィールドが8個ないとかね

オートフィルターをマクロ記録で実行して確認してみてください。

【12202】Re:subまたはfunctionが定義されていませ...
お礼  超初心者・・・  - 04/3/26(金) 15:35 -

引用なし
パスワード
   お返事戴きありがとうございます。

マクロのオートフィルタで確認してみましたが、
AutoFilter field:=8, Criteria1:=割引日
の field:=8 のほうは正しかったです。

ただ良くわからないのが、「Criteria1:=割引日」の部分で、
割引日という変数はVariant型で、テキストボックスに「3/16」のような形で
入力してそれを格納し、その日付でオートフィルタをかける、というイメージなんですが
それがうまくいかない理由なんでしょうか・・・?

たびたびお手数をおかけして申し訳ありませんが、よろしければ教えてください。
よろしくお願いします。

【12203】Re:subまたはfunctionが定義されていませ...
回答  IROC  - 04/3/26(金) 15:50 -

引用なし
パスワード
   >ただ良くわからないのが、「Criteria1:=割引日」の部分で、
>割引日という変数はVariant型で、テキストボックスに「3/16」のような形で
>入力してそれを格納し、その日付でオートフィルタをかける、

日付の扱いには注意が必要です。

まず
  割引日 = TextBox1.Value
ですが、TextBox1.Value は、文字列を返すので
変数 割引日 は 
Dim 割引日 As String
とします。

しかし、シート上のフィルタする対象が日付の場合、
セルに入力されているのは、シリアル値といって日付型の値です。

つまり 1900/1/1 を 1 として、 +1日ごとに +1 される
連続したただの数値なのです。
それを表示形式で yyyy/m/d のように表示しているだけなのです。

なのでフィルタのキーワードは、シリアル値(日付型)で指定する必要があります。

入力が 3/16 だと、 年 の指定がないので、対応できません。

もし、入力を m/d でおこなうなら
セルの日付を文字列にするしかありません。

セルを日付型にしておくなら、「年」の入力が必要です。

しかし、年 が固定なら

Textbox1.text = "3/16"

割引日 = cdate("2004" & Textbox1.text)

にすれば出来るかと思います。

cdate は、 日付型に変換する関数です。

【12244】Re:subまたはfunctionが定義されていませ...
お礼  超初心者・・・  - 04/3/28(日) 0:57 -

引用なし
パスワード
   ▼IROC さん:
>>ただ良くわからないのが、「Criteria1:=割引日」の部分で、
>>割引日という変数はVariant型で、テキストボックスに「3/16」のような形で
>>入力してそれを格納し、その日付でオートフィルタをかける、
>
>日付の扱いには注意が必要です。
>
>まず
>  割引日 = TextBox1.Value
>ですが、TextBox1.Value は、文字列を返すので
>変数 割引日 は 
>Dim 割引日 As String
>とします。
>
>しかし、シート上のフィルタする対象が日付の場合、
>セルに入力されているのは、シリアル値といって日付型の値です。
>
>つまり 1900/1/1 を 1 として、 +1日ごとに +1 される
>連続したただの数値なのです。
>それを表示形式で yyyy/m/d のように表示しているだけなのです。
>
>なのでフィルタのキーワードは、シリアル値(日付型)で指定する必要があります。
>
>入力が 3/16 だと、 年 の指定がないので、対応できません。
>
>もし、入力を m/d でおこなうなら
>セルの日付を文字列にするしかありません。
>
>セルを日付型にしておくなら、「年」の入力が必要です。
>
>しかし、年 が固定なら
>
>Textbox1.text = "3/16"
>
>割引日 = cdate("2004" & Textbox1.text)
>
>にすれば出来るかと思います。
>
>cdate は、 日付型に変換する関数です。

お返事遅くなってしまい大変申し訳ありませんでした。
どうもありがとうございます。

元データの日付を最初は文字列にしていたのですが、日付にしてみたら抽出できました。
・・・ただ、12か月分のデータの割引日に対してフィルタをかけるという意図なんですが、4月分だけ、”H1"ではなく、2行目の全ての列でオートフィルタのボタンが表示されてしまうという現象が起きています。
これはいったいどういうことなんでしょう??
せっかく出来たと思ったのに、またはまってしまいました・・・

【12251】Re:subまたはfunctionが定義されていませ...
回答  IROC  - 04/3/28(日) 11:54 -

引用なし
パスワード
   読みにくくなるので、不要な全文引用はしないようにして下さい。


>・・・ただ、12か月分のデータの割引日に対してフィルタをかけるという意図なんですが、4月分だけ、”H1"ではなく、2行目の全ての列でオートフィルタのボタンが表示されてしまうという現象が起きています。
>これはいったいどういうことなんでしょう??

オートフィルタされる範囲については、
シート上のデータのレイアウトや指定方法が
正確に分からないと何とも言えません・・・。

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