![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
エクセルVBAにて2つの異なるワークブック(セルの配置等は同じ)からセル値を読みだし,それを比較した際に同値であれば2つとは異なる第3のワークブック(同じくセルの配置等は同じ)の読みだしたセルの位置と同じセルに文字列を入力するというプログラムを書こうとしています.その際に他のワークブックAのシートを開き,任意のセル範囲のみを用意した配列に格納しようとすると「オブジェクト変数または with ブロック変数が設定されていません。」というエラーが出ます.これはworksheetとして定義した変数ssのcellsを操作しようとしているから発生しているのでしょうか?最近VBAの勉強を始めたばかりで全く分かっていません.初歩的な質問となってしまうかもしれませんがご教授宜しくお願いします.
Option Explicit
Public cs As Worksheet
Public sb As Workbook
Public ss As Worksheet
Public Sub make()
Dim sn As Long
Dim sname As String
Dim i As Integer
Set c = ThisWorkbook.Worksheets(1)
Set sb = Workbooks.Open("A")
sn = sb.Sheets.Count
For i = 1 To seiton
sname = Sheets(i).Name
Set ss = sb.Worksheets(i)
Call match
Next
sb.Close False
Set ss = Nothing
Set sb = Nothing
End Sub
Public Sub match()
Dim i, j, k As Integer
Dim day, koma As Integer
day = 24
koma = day * 5
Dim can() As Boolean
Dim kout() As Byte
Dim seit() As Byte
ReDim can(koma)
ReDim kout(koma)
ReDim seit(koma)
For i = 0 To koma
j = i \ 5
For k = 0 To 5
seit(i) = ss.Cells(k + 3, 2 + j) '←この部分でエラーが出ています
Next
Next
Erase can
Erase kout
Erase seit
End Sub
No.1ベストアンサー
- 回答日時:
結論を言うとjが少数になっているため列番号がおかしくなっているのでしょう。
Public Sub match()
Dim i, j, k As Integer
上記の型宣言では、iとjはvariant型として認識されます。
型宣言は実は1つずつ行う必要があります。正しくは
Dim i As Integer, j As Integer, k As Integer
私も最初間違えて正解を知った時は「えーー?」と思いましたが、1つずつするのです。
他に気付いた点は
Eraseは最後でなく配列を使う直前に行った方がいいです。値が入ったまま途中で止まったり、なんだかんだと色々な値が入ってしまってます。
この回答への補足
そうなんですか?!今までこの定義にて問題が発生していなかったため知りませんでした.
御指摘いただいた部分に関して修正を行ったのですがエラー箇所,エラー内容ともに変化ないのですが...
No.2
- 回答日時:
エラーが再現できません。
変数の宣言方法は先の回答者の通りなのですが面倒なのでそのままです。
コンパイルエラーになった部分のみ修正しただけです。
Erase の3行もなくても大丈夫そうですがそのまま (^_^;)
Small.xlsx は至極単純なBookです。
関数・セル結合・保護などしていません。
開いたBookに何かあるのでは?
k、j の値と共に確認されては?
Option Explicit
Public cs As Worksheet
Public sb As Workbook
Public ss As Worksheet
Public Sub make()
Dim sn As Long
Dim sname As String
Dim i As Integer
'Set ss = ThisWorkbook.Worksheets(1) 'c → ss
Set sb = Workbooks.Open("E:\TMP\Small.xlsx")
sn = sb.Sheets.Count
For i = 1 To sn 'seiton
sname = Sheets(i).Name
Set ss = sb.Worksheets(i)
Call match
Next
sb.Close False
Set ss = Nothing
Set sb = Nothing
End Sub
Public Sub match()
Dim i, j, k As Integer
Dim day, koma As Integer
day = 24
koma = day * 5
Dim can() As Boolean
Dim kout() As Byte
Dim seit() As Byte
ReDim can(koma)
ReDim kout(koma)
ReDim seit(koma)
For i = 0 To koma
j = i \ 5
For k = 0 To 5
seit(i) = ss.Cells(k + 3, 2 + j) '←この部分でエラーが出ています
Next
Next
Erase can
Erase kout
Erase seit
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
貼り付けで複数セルに貼り付けたい
-
エクセルで指定したセルのどれ...
-
【エクセル】IF関数 Aまたは...
-
Excelでのコメント表示位置
-
エクセル 足して割る
-
Excelで数式内の文字色を一部だ...
-
【Excel】 セルの色での判断は...
-
EXCEL VBA セルに既に入...
-
エクセル オートフィルタで絞...
-
エクセルの一つのセルに複数の...
-
枠に収まらない文字を非表示に...
-
エクセルの書式設定の表示形式...
-
対象セル内(複数)が埋まった...
-
Excel2003 の『コメント』の編...
-
(Excel)数字記入セルの数値の後...
-
エクセル “13ヶ月”を“1年1ヶ月...
-
エクセルの関数VLOOKUP...
-
エクセルで休憩時間を引く時と...
-
excelのCOUNTIF関数で、『範囲=...
-
エクセルのセルの枠を超えて文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル 足して割る
-
【エクセル】IF関数 Aまたは...
-
エクセルで指定したセルのどれ...
-
Excelで数式内の文字色を一部だ...
-
Excelでのコメント表示位置
-
貼り付けで複数セルに貼り付けたい
-
対象セル内(複数)が埋まった...
-
セルをクリック⇒そのセルに入力...
-
【Excel】 セルの色での判断は...
-
エクセルの一つのセルに複数の...
-
EXCEL VBA セルに既に入...
-
エクセル “13ヶ月”を“1年1ヶ月...
-
エクセル オートフィルタで絞...
-
エクセルのセルの枠を超えて文...
-
excelのCOUNTIF関数で、『範囲=...
-
(Excel)数字記入セルの数値の後...
-
枠に収まらない文字を非表示に...
-
Excel2003 の『コメント』の編...
-
Excel 例A(1+9) のように番地の...
-
複数のセルのいずれかに数字が...
おすすめ情報