教えて!gooにおける不適切な投稿への対応について

あるExcelVBAを動かしたいのですが、VBA自体初心者の為何故エラーになってしまったのか理解出来ずお力をお借りしたいと思い質問させて頂きます。

動かしたいVBAは以下です。

シート①とシート②に同じスロット番号が書かれているとし(例スロット番号001)同じスロット番号の場合
シート①のスロット番号の隣のセルに記載されている【A】という文字をシート②の同じスロット番号の隣のセルに転記させる。
それを1行ずつループさせて行う。
なお、シート②の転記すべきセルが空白でない場合は
メッセージボックスにてエラー文を出現させ、エラー箇所を提示させる。

Dim ws1 as Worksheet
Dim ws2 as Worksheet
Dim a as Integer

Set ws1 = Worksheet("シート①")
Set ws2 = Worksheet("シート②")

For a = 1 to 10

If ws1.Range(ws1.Cells(a,1).Offset(0.1)) ="A" Then
ws2.Range(ws2.Cells(a,1).Offset(0.1)) ="A"

この時点でIf ws1〜の部分にエラーが生じてしまいます
ループ文のせいでエラーになっていると思うのですが、解決法が分からない状態です。

質問者からの補足コメント

  • Offset部分は単なる入力ミスなので無視して下さい。

      補足日時:2021/03/29 17:48
gooドクター

A 回答 (5件)

>If ws1.Range(ws1.Cells(a,1).Offset(0.1)) ="A" Then


ここでエラーになるということですが・・・。

まず、ws1.Cells(a,1).Offset(0,1) ですが、変数aが1の場合、B1セルを指すことになります。B1セルに”Z9”のようなセルのアドレスとして有効な文字列が入っているとすると「Z9セルの値=”A"の場合」ってIF文になります。
解決法としては、B1~B10セルに、セルアドレスとして有効な文字列を入力しておけばOKです。
ただ、これが質問者さんのやりたいこととは、到底、思えませんが、何がしたいのでしょうか?
    • good
    • 0

ws1.Range(ws1.Cells(a,1).Offset(0.1))



ws1.Cells(a,1).Offset(0,1).Value
もう一つも。
    • good
    • 0

Offset(0.1)は誤り


Offset(0,1)が正しいです。
    • good
    • 0

こんにちは



何をどうしたいのかよくわかりませんが、とりあえずエラーになりそうなところを・・・

>Set ws1 = Worksheet("シート①")
Worksheets( ~~ )にしておかないとエラーになります。

>Range(ws1.Cells(a,1).Offset(0.1))
Rangeの引数にcellを指定する場合は、セル範囲を示すための2か所が必要。
Offset(0.1)は整数化されて、Offset(1)と解釈されるけれど、(0,1)のつもりなのでは?
結局のところ、単独セルの指定をしたいのなら
 ws1.Cells(a,1).Offset(0,1)
で足りるものと思われます。

For文に対する、Next文が示されていないけれど、省略はできません。
    • good
    • 0

Offset(0.1) ではなく Offset(0, 1)



ピリオドとカンマの違い。
    • good
    • 0

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

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

gooドクター

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

人気Q&Aランキング