エクセル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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
WorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】
Excel(エクセル)
-
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
エクセルマクロで「1」を「01」に変換したい
Excel(エクセル)
-
-
4
UserForm1.Showでエラーになります。
工学
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
7
VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelでセルの値が同じか...
-
【エクセル】IF関数 Aまたは...
-
EXCEL VBA セルに既に入...
-
エクセルで指定したセルのどれ...
-
セルをクリック⇒そのセルに入力...
-
エクセルのセルの枠を超えて文...
-
Excelでのコメント表示位置
-
Excelで数式内の文字色を一部だ...
-
エクセル オートフィルタで絞...
-
貼り付けで複数セルに貼り付けたい
-
エクセル 足して割る
-
エクセル②
-
枠に収まらない文字を非表示に...
-
対象セル内(複数)が埋まった...
-
複数のセルのいずれかに数字が...
-
(Excel)数字記入セルの数値の後...
-
【Excel】 セルの色での判断は...
-
エクセルの一つのセルに複数の...
-
Excel2003 の『コメント』の編...
-
エクセルで以下の条件の時、関...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで指定したセルのどれ...
-
【エクセル】IF関数 Aまたは...
-
貼り付けで複数セルに貼り付けたい
-
対象セル内(複数)が埋まった...
-
Excelで数式内の文字色を一部だ...
-
セルをクリック⇒そのセルに入力...
-
Excelでのコメント表示位置
-
エクセル 足して割る
-
excelのCOUNTIF関数で、『範囲=...
-
EXCEL VBA セルに既に入...
-
エクセル オートフィルタで絞...
-
エクセルのセルの枠を超えて文...
-
(Excel)数字記入セルの数値の後...
-
エクセルの一つのセルに複数の...
-
【Excel】 セルの色での判断は...
-
Excel2003 の『コメント』の編...
-
エクセル “13ヶ月”を“1年1ヶ月...
-
複数のセルのいずれかに数字が...
-
枠に収まらない文字を非表示に...
-
excelの特定のセルの隣のセル指...
おすすめ情報