ここから質問投稿すると、最大4000ポイント当たる!!!! >>

エクセルでVBエディタでソースコードを記述し、マクロを実行すると、コンパイルエラー、「SubまたはFunctionが定義されていません」とエラーが出ます。これはどういうエラーですか?何が間違っているのですか?

このQ&Aに関連する最新のQ&A

A 回答 (5件)

コードの行の中に


ステートメント、関数、などに見つからない行があるということ
abc
と書くとすると、VBAの予想するあらかじめ決まったステートメント、関数、メソッド、プロパティで存在しないので、
関数Functionプロジュアーか
SUBプロシージャー
を書いたものととりあえず解釈して
それを探すが、別の場所に存在しないのでエラー指摘になる。
Sub test01()
asd
End Sub
のようなのをやってご覧。同じエラーがでるよ。
何をasdに間違ったかは、その行の指摘があれば、作っているものは
すぐ気が付くよ。
上記でasdの位置に
RangeSelectを入れた場合は「SubまたはFunctionが定義されていません」だし
Range("A1")Selectは「構文エラー」だ。微妙なものだよ。
ほんとに何かの事情で関数かSubプロシジュアーが消えたか
名前が変えられたか(1字誤って抹消したり、加わったり)もあるかもしれない。
    • good
    • 1
この回答へのお礼

わざわざ御回答くださいまして有難う御座いました。原因は、単なるミスタイプでした。でも、回答文は勉強になりました。

お礼日時:2008/03/23 20:30

#4の方もおっしゃっている通り、コードを見てみないと適切なことは何も言えません。

私の経験からも、わかってみればほんの些細なことが原因のことも多いものですが、その時にはなかなか気づかないものです。かなり、おせっかいかもしれませんが、コードを改めて投稿欄に手入力する必要はありません。「ツール」→「マクロ」→「マクロ」→「編集」で開いた画面にコードが表示されますので、それをコピーして張り付ければいいのです。但しその際、ユーザー名等、そのままでは個人情報漏洩につながる部分は貼り付けたあと、投稿画面上では削除してくださいね。お互いのためです。
    • good
    • 0
この回答へのお礼

わざわざ御回答くださいまして有難う御座いました。原因は、単なるミスタイプでした。お騒がせ致しまして申し訳御座いませんでした。

お礼日時:2008/03/23 20:34

こんばんは。



良くあるミスですが、たぶん、ローカルモジュールに書いてしまって、それを呼び出そうとしているからではないでしょうか?

Excelの場合のみですが、基本的には、標準モジュールにコードを書いてください。
もしくは、左辺のない文字コードで、呼び出しに該当するプロシージャ等がないものです。

ここのカテゴリでのVBAの質問は、最低限、このエラーを出したコードを見せてください。別に、それが恥ではありません。

なお、Excel VBAは、実行前にコンパイルしています。他のプログラミング言語と同じように、中間言語として、仮想メモリの中に存在していますが、実行ファイルとして出力されていないだけです。
    • good
    • 1
この回答へのお礼

わざわざ御回答くださいまして有難う御座いました。原因は、単なるミスタイプでした。お騒がせ致しました。申し訳御座いませんでした。

お礼日時:2008/03/23 20:32

>これはどういうエラーですか?何が間違っているのですか?



ソースを見ないと何とも言えませんが、ミスタイプなどで何らかのプログラムを呼び出すような記述になっているのだと思います。


Sub test1()
MsgBox aaa()
bbb
End Sub

Function aaa()
aaa = "xyz"
End Function

Sub bbb()
MsgBox "end"
End Sub

Function aaa()やSub bbb()が存在しない場合はエラーが出ます。
    • good
    • 0
この回答へのお礼

わざわざ御回答くださいまして、有難う御座いました。原因は、単なるミスタイプでした。お騒がせ致しまして申し訳御座いませんでした。

お礼日時:2008/03/23 20:27

コード中に、定義してない関数かサブルーチンを使っているという事です。

一行ずつ実行していけば、未定義箇所でエラーになります。

ちなみにエクセルVBAはインタープリターなのでコンパイルはしないと思います。
    • good
    • 0
この回答へのお礼

わざわざご回答を有難う御座いました。原因は、単なるミスタイプでした。お騒がせ致しまして申し訳御座いませんでした。

お礼日時:2008/03/23 20:24

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcel VB→SubまたはFunctionが定義されていません

お世話になります
コンパイラーエラー
SubまたはFunctionが定義されていません
がでます
ツール→マクロ→VisualBasicEditorでVBに入った画面では
左側に
イミディエイト、ウィンドウ
プロジェクト
  ThisWorkbook←が選択されている
が出ています
右のThisWorkbookのコードウィンドウに
Public Function tt()
  MsgBox ("メッセージ出すよ")
End Function
と3行入れました
実行
左のイミディエイトウィンドウに
tt
と入力すると、上記の
SubまたはFunctionが定義されていません
とでます
イミディトに、
tt
といれたものがどうして認識されまいんでしょう
Window XPの上でExcel2003、が走っています
不足した情報があれば追記します
よろしくお願いします

Aベストアンサー

ThisWorkbook.tt

などとやると認識しますよ。

Qsub又はfunctionが定義されていない??

プログラム内容
4たくの問題を乱数で出す(テスト用のPGのため数字にしていますが、実際は文字が入ります)




Private Sub Form_Load()

Dim Total As Integer

Dim mo() As String
Dim se_a() As String
Dim se_i() As String
Dim se_u() As String
Dim se_e() As String

Dim ka() As String
Dim kai() As String

Total = 3


ReDim mo(Total) As String
ReDim se_a(Total) As String
ReDim se_i(Total) As String
ReDim se_u(Total) As String
ReDim se_e(Total) As String

ReDim ka(Total) As String
ReDim kai(Total) As String


'-----------------------

mo(1) = "1 + 1"
mo(2) = " 2 + 2"
mo(3) = " 3 + 3"

'-----------------------------
se_a(1) = "2"
se_a(2) = " 2"
se_a(3) = " 2"


se_i(1) = "3"
se_i(2) = "3"
se_i(3) = "3"

se_u(1) = "4"
se_u(2) = "4"
se_u(3) = "6"

se_e(1) = "7"
se_e(2) = "5"
se_e(3) = "9"














'--------------------------

ka(1) = "ア"
ka(2) = "ウ"
ka(3) = "ウ"


kai(1) = "a"
kai(2) = "s"
kai(3) = "s"

'-----------






End Sub


Private Sub kotae_Click()
kaitou.Visible = True

End Sub

Private Sub next_Click()
Dim i As Integer


kaitou.Visible = False


i = Int(Rnd * Total) + 1


NO.Text = i

MONDAI.Text = mo(i)


select_a.Text = se_a(i)
select_i.Text = se_i(i)
select_u.Text = se_u(i)
select_e.Text = se_e(i)


kaitou.Text = ka(i)



End Sub


でエラーが出ます。何がおかしいのでしょうか
MONDAI.Text = mo(i)
にエラーがあるようなのですが・・・。

kai =解説

プログラム内容
4たくの問題を乱数で出す(テスト用のPGのため数字にしていますが、実際は文字が入ります)




Private Sub Form_Load()

Dim Total As Integer

Dim mo() As String
Dim se_a() As String
Dim se_i() As String
Dim se_u() As String
Dim se_e() As String

Dim ka() As String
Dim kai() As String

Total = 3


ReDim mo(Total) As String
ReDim se_a(Total) As String
ReDim se_i(Total) As String
ReDim se_u(Total) As String
ReDim se_e(Total) As String

R...続きを読む

Aベストアンサー

このサンプルコードだとできますよ。
ちゃんと"aaa"と表示されます。

Option Explicit

Private mo() As String
Private total As Integer

Private Sub Form_Load()
total = 3
ReDim mo(total) As String

mo(0) = "aaa"
Debug.Print mo(0)
End Sub

QコンパイルエラーSubまたはFunction定義

VBAユーザーフォーム作成の上記エラーについて
VBA初心者です。
初心者ですので、本を見ながら作成していましたが、その通り作成したつもりがエラー表示が・・
シート上にユーザーフォームは出てくるようにして入力をしているのですが、ボタン(更新、追加、削除)やスピン移動をクリックすると「コンパイルエラー SubまたはFunctionが定義されていません」とでてきます。本の通りしたので何が悪かったのかよくわからなくなりました。
下記に本を見て作ったコードを書きますので教えて頂きたいです。素人すぎますので説明不足もありますが宜しくお願いします。

Private Sub Button更新_Click()
データ書き込み (Spin移動.Value)

End Sub

Private Sub Button削除_Click()

データ範囲.Rows(Spin移動.Value).Delete
データ表示 (Spin移動.Value)

Set データ範囲 = Range("A1").CurrentRegion
Spin移動.Max = データ範囲.Rows.Count

End Sub

Private Sub Button終了_Click()
患者様データ.Hide

End Sub

Private Sub Button追加_Click()

Dim AddRow As Integer
AddRow = データ範囲.Rows.Count + 1  
データ書き込み (AddRow)




Textレコード.Text = Spin移動.Value - 1 & "/" & レコード数取得
Set データ範囲 = Range("A1").CurrentRegion
Spin移動.Max = データ範囲.Rows.Count
Spin移動.Value = データ範囲.Rows.Count
データ表示 (AddRow)


End Sub

Private Sub MultiPage1_Change()

End Sub

Private Sub Option女_Click()

End Sub

Private Sub Option男_Click()

End Sub

Private Sub Spin移動_Change()
If データ範囲.Rows.Count <> 1 Then
データ表示 (Spin移動.Value)
End If



End Sub


Private Sub TextIIIIV音_Change()

End Sub

Private Sub Text患者ID_Change()

End Sub



Private Sub Text生年月日_AfterUpdate()
Text年齢.Value = DateDiff("yyyy", Text生年月日.Value, Now())

End Sub



Private Sub UserForm_Initialize()

Dim TBL(1 To 9) As Control
Dim データ範囲 As Range


Combo診療科.ColumnCount = 1
Combo診療科.AddItem "内科"
Combo診療科.AddItem "外科"
Combo診療科.AddItem "小児科"

Combo主治医.ColumnCount = 1
Combo主治医.AddItem "今中尚子"
Combo主治医.AddItem "岡井康葉"



Set TBL(1) = Text患者ID
Set TBL(2) = Text氏名
Set TBL(3) = Text生年月日
Set TBL(4) = Frame性別
Set TBL(5) = Combo診療科
Set TBL(6) = Combo主治医
Set TBL(7) = Text入院日
Set TBL(8) = Text退院日
Set TBL(9) = Combo指導医

Set データ範囲 = Range("A1").CurrentRegion
Spin移動.Max = レコード数取得 + 1
If データ範囲.Rows.Count = 1 Then
Else
データ表示 2
End If


End Sub

Public Sub データ表示(行数 As Integer)

Dim Cnt As Integer
For Cnt = 1 To 9
Select Case Cnt
Case 4
If データ範囲.Cells(行数, Cnt).Value = "男" Then
Option男.Value = True
Else
Option女.Value = True
End If
Case Else
Dim S
For Cnt = 1 To 9
S = データ範囲cells(行数, Cnt).Value
Next






End Select
Next

If IsDate(Text生年月日.Text) Then
Text年齢.Value = DateDiff("yyyy", Text生年月日.Value, Now())
Else
Text年齢.Value = Null
End If
Textレコード.Value = Spin移動.Value - 1 & "/" & レコード数取得

End Sub

Public Sub データ書き込み(行数 As Integer)
Dim Cnt As Integer
For Cnt = 1 To 9
Select Case Cnt
Case 4
If Option男.Value = True Then
データ範囲.Cells(行数, Cnt).Value = "男"
Else
データ範囲.Cells(行数, Cnt).Value = "女"
End If
Case Else
データ範囲.Cells(行数, Cnt).Value = TBL(Cnt).Value ←このTBLの部分で青くなり上記エラー
End Select
Next

End Sub

Public Function レコード数取得() As Integer
レコード数取得 = Range("A1").CurrentRegion.Rows.Count - 1


End Function

VBAユーザーフォーム作成の上記エラーについて
VBA初心者です。
初心者ですので、本を見ながら作成していましたが、その通り作成したつもりがエラー表示が・・
シート上にユーザーフォームは出てくるようにして入力をしているのですが、ボタン(更新、追加、削除)やスピン移動をクリックすると「コンパイルエラー SubまたはFunctionが定義されていません」とでてきます。本の通りしたので何が悪かったのかよくわからなくなりました。
下記に本を見て作ったコードを書きますので教えて頂きたい...続きを読む

Aベストアンサー

変数の使い方が間違っています。

変数は、それを定義したSubまたはFunctionの中でしか有効ではありません。

このプログラムで言えば、
Private Sub UserForm_Initialize()
Dim TBL(1 To 9) As Control
Dim データ範囲 As Range
・・・・
End Sub
なので、TBLやデータ範囲の変数が使えるのは Sub UserForm_Initialize の中だけです。

どうしてもUserForm_Initializeの外で使いたいなら、
パブリック変数にする必要があります。

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

QVBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクトのエラー

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義がまずいと思うのですが、それ以上の事は分かりません。どなたか、分かる方がおりましたら、よろしくお願いします。また、プログラムは以下のようになります。

Sub 繰り返し()
'繰り返し
Dim s As Integer
For s = 0 To 17
Range("cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)").Select
Range("cells(8,s+2)").Activate
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("20081216_210647").Range( _
"cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)"), PlotBy:=xlColumns
ActiveChart.SeriesCollection(1).Name = "=""0810p2x"""
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="0810p2x"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "0810p2x"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "t"
.Axes(xlValue, xlPrimary).HasTitle = False
End With
Next
End Sub

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義...続きを読む

Aベストアンサー

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな(Excelで表示されている)シートが上位オブジェクトとして、自動的に認識されます。

≪例2≫
Sheets("Sheet2").Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、Rangeのみシート名が記述されています。
Sheets("Sheet2").Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
Activeなシートが、Sheet2の場合はエラーになりません。
しかし、ActiveなシートがSheet2以外の場合、エラーが発生します。
直前に、
Sheets("Sheet1").Select
などとしていれば、ActiveシートがSheet1になっていますから、エラーになります。

Sheets("Sheet2").Range(Sheets("Sheet2").Cells(8, 1), Sheets("Sheet2").Cells(1587, 2)).Select
と書いておけば安心です。
Withステートメントを使えばスッキリ纏めることができます。
With Sheets("Sheet2")
  .Range(.Cells(8, 1), .Cells(1587, 2)).Select
End With

# Sheets("Sheet2")の上位オブジェクトが省略されていることにも気がついてください。

>そこで自分で基礎を勉強したいのですが推薦できる参考書などがござ
>いましたら、教えていただけませんか?
私自身は、入門書程度の雑誌を1冊買っただけです。どれが良いとかはよく分かりません。
「マクロの記録」を活用して、参考コードを取得し、汎用性のあるコードに編集しています。
新しい単語があれば、文字カーソルを単語の上に置き、F1キーを押してVBAのヘルプを必ず見るようにしています。
躓いた時は、Web検索して欲しい情報を得たり、あるいは、こうした掲示板で先輩方のお力をお借りしています。

Excel(エクセル)VBA入門:目次
http://oshiete1.goo.ne.jp/kotaeru_reply.php3?q=4651404
エクセル入門・初級編
http://www.kenzo30.com/excel_kiso.htm

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな...続きを読む

QエクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?

ワークシート関数で書けば
=IF(OR(F18=0,AND(F15>0,F16>0)),TRUE)です。
これをVBAで書こうとして

If Sheet1.Range("F18") = 0 Or Sheet1.Range("F15") > 0 And Sheet1.Range("F16") > 0 Then
MsgBox True
Else
MsgBox False
End If

とやってみたのですが、正しくないようです。
どのように書けばいいのでしょうか?

Aベストアンサー

>とやってみたのですが、正しくないようです。

式は正しいと思いますよ

ANDとORは、ANDが先に演算されます。/*と+-では、/*が先に演算されるようなものです。

でも、わかり易くするために、#1のかたのように括弧をつけるほうが良いですね。

Qエクセル マクロ実行時エラー’1004’

For~Next構文内でシートコピーしていると途中で、
実行時エラー'1004’
WorksheetクラスのCopyメソッドが失敗しました。
が表示されることがあります。

該当のFor~Next文は10回以上実行されているので、コードの誤りではないと思うのですが、なぜ「Copyメソッドが失敗」するのかわかりません。
理由/対処方法がわかればありがたいと思い質問させていただきます。

**該当コード**
Sub 評価シート作成()
  Sheets(社員一覧).Select
  行 = 1
  Do
    ReDim Preserve 社員CD(行)
    ReDim Preserve 氏名(行)
    社員CD(行) = Cells(行 + 1, 1).Value
    氏名(行) = Cells(行 + 1, 2).Value
    行 = 行 + 1
  Loop Until Cells(行, 1) = ""
  人数 = 行 - 2
  For 回数 = 1 To 人数
    Sheets(評価シート).Select
    Sheets(評価シート).Copy after:=Sheets(評価シート)
    ActiveSheet.Name = 氏名(回数)
    Cells(4, 5) = 氏名(回数)
    Cells(4, 3) = 社員CD(回数)
  Next 回数
End Sub
*****************************
よろしくお願いします

For~Next構文内でシートコピーしていると途中で、
実行時エラー'1004’
WorksheetクラスのCopyメソッドが失敗しました。
が表示されることがあります。

該当のFor~Next文は10回以上実行されているので、コードの誤りではないと思うのですが、なぜ「Copyメソッドが失敗」するのかわかりません。
理由/対処方法がわかればありがたいと思い質問させていただきます。

**該当コード**
Sub 評価シート作成()
  Sheets(社員一覧).Select
  行 = 1
  Do
    ReDim Preserve 社員CD(行)
   ...続きを読む

Aベストアンサー

ひょっとしてこれに該当するのかな?

Excel でプログラムを使用してワークシートをコピーするとランタイム エラー 1004 が発生する
http://support.microsoft.com/kb/210684/ja


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング