現在開いているブックの任意のセルからoffsetされたセルの値を変数に代入したいのですがうまくいきません。
現在開いているブックをbook1とし、book2に変数goに入る値によって変更したいシート(sheet1,
sheet2)二枚のサンプルシートを準備。
仮にbook1のS19(変数goに入る値)が1の場合、book2のsheet1(go=2であればsheet2
を)コピーしコピーした該当セルに各変数に入っている値を転記するマクロを作りたいと思っています。
本来であれば変数が多くなったりとあまり良くない方法でしょうから配列等を使った方が良いのかもしれませんが、そこまで自分の技術がないこと・変数の値によってbook2への処理が変わることから多くの変数を作っています。
下記コードは一部抜粋ではありますが躓いている部分のコードになります。
変数coのところで止まってしまうのですがcoをdo以下のようにrangeでセル位置を固定した場合はうまくいきました。
ただ業務上セルの位置が都度変更となるため、book1の任意のセルを選びそのセルからoffsetされたセルの値を変数に代入しようと以下(coの部分のみ)書き換えたところうまくいかなく(コンパイルエラー:メソッドまたはデータメンバーが見つかりません)なりました。
Set wb1 = ThisWorkbook
Set sh1 = ActiveSheet
'選択した荷主セルを基準に各変数へ各値を代入
With sh1
co = .ActiveCell.Offset(2, -17).Value
do = .Range("D19").Value
no = .Range("E18").Value & Range("E19").Value & Range("F19").Value
tel = .Range("D18").Value
ld = .Range("U4").Value
dd = .Range("Z18").Value
go = .Range("S19").Value
End With
初心者ですので「セルの指定を基準セルからのoffsetで指定すればいいんだ!」と考えてしまったのですが違ったようで…。
お手数ではありますがコード意味等を付けて頂くと非常に助かります。
ご指導よろしくおねがいします!
No.2
- 回答日時:
こんばんは
環境がないので確認していませんが、
>.ActiveCell
のドットを外して
ActiveCell
にしてみてはいかがでしょうか?
貴重なご意見ありがとうございます。
残念ながらドットを外してみたものの変化はありませんでした。
結果はともかく何とかしようとして下さるお気持ちに、心より感謝いたします。
ありがとうございました!
No.3
- 回答日時:
No2です。
>残念ながらドットを外してみたものの変化はありませんでした
あらら…失礼いたしました。
ActiveCellってRangeとは違うのですかねぇ・・
今、環境がないので確認はできないのですが、それなら、Rangeに置き換えてしまえばうまく行くのではないでしょうか。(多分)
.Range(ActiveCell.Address).Offset(2, -17).Value
ではいかがでしょうか?
Offset先のセルが存在する(シート外になっていない)ことが条件ですけれど。
お時間を取らせてすみません。
ご指導頂いた通りに変更してみたのですがダメでした。
現在書いているコード(.range(activecell .address)へ変更しています)は以下のようなものです。
実績を入力するブックから連絡表に必要なデータを取り出しプリントアウトするのが目的となります。
Dim wb1 As Workbook, wb2 As Workbook '実績を入れる変数
Dim sh1 As Worksheet, sh2 As Worksheet '連絡表のシート操作時のシートを入れる変数
Dim co As String '会社名を入れる変数
Dim do As String '作業名を入れる変数
Dim no As String '作業Noを入れる変数
Dim tel As String '携帯Noを入れる変数
Dim ld As Date '入荷日を入れる変数
Dim dd As Date '納品日を入れる変数
Dim go As String '納品先を入れる変数
Set wb1 = ThisWorkbook
Set sh1 = ActiveSheet
'選択した荷主セルを基準に各変数へ各値を代入
With sh1
co = .Range(ActiveCell.Address).Offset(2, -17).Value
do = .Range("D19").Value
no = .Range("E18").Value & Range("E19").Value & Range("F19").Value
tel = .Range("D18").Value
ld = .Range("U4").Value
dd = .Range("Z18").Value
go = .Range("S19").Value
End With
No.4ベストアンサー
- 回答日時:
No3です。
>ご指導頂いた通りに変更してみたのですがダメでした。
・・・????
おかしいと思って、こちらでもちゃんと試してみました。
ご提示の
>.ActiveCell.Offset(2, -17).Value
ではエラーになりますが、No2、No3の
co = ActiveCell.Offset(2, -17).Value
co = .Range(ActiveCell.Address).Offset(2, -17).Value
であれば、どちらも動作します。
(No3はまわりくどいので、No2の方が良いでしょう)
No3にも書いておきましたけれど、Offsetの結果が無効なアドレスになっていませんか?
ActiveCellがR列よりも大きな列番号になければ、当然の結果としてエラーになります。
例えば、coに値を代入する前に
If ActiveCell.Column < 18 Then MsgBox "列番号が小さすぎ"
の一行を入れておけば、簡単なチェックになりますけれど、これに引っかかっていたりするのでは??
(もしそうなら、そもそものテスト方法がおかしいとも言えますが…)
fujillinさんありがとうございました。
再度offsetさせる数を数えなおしたところ、ご指摘にあった通り列番号の数え間違いでした。
初歩的なミスでお時間を取らせてしまいすみません。
また私の初歩的質問にも温かくご対応頂きありがとうございました。
ここに質問に来る方は私を含めみなさんわからないから質問に来るのであって、fijillinさんのように温かく投げださず教えてくれる方が居ることは非常に有難く心強く感じます。
今後も質問をさせて頂く事と思いますが、見かけたときはまたご教授頂ければ幸いです。
今後ともよろしくお願いします。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) VBAの参照先のファイル名をセルに書いて代入したい 2 2022/04/04 13:42
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
Excelで空白セル直前のセルデー...
-
Excel UserForm の表示位置
-
エクセルVBA 配列からセルに「...
-
【Excel VBA】一番右端セルまで...
-
入力規則のリスト選択
-
関数の引数でrangeを指定したとき
-
VBA:日付を配列に入れ別セルに...
-
複数指定セルの可視セルのみを...
-
VBA にて、条件付き書式で背景...
-
VBAについて
-
Excel VBA IF文がうまく動作し...
-
【VBA】【ユーザーフォーム_Lis...
-
EXCEL VBA 文中の書式ごと複写...
-
DataGridViewのフォーカス遷移...
-
[Excel VBA] このコードでは行...
-
C# DataGridViewで複数選択した...
-
VBAでユーザーフォームにセル値...
-
指定した文字から指定した文字...
-
Excel VBAでCheckboxの名前を変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
VBA 複数条件の分岐処理の上手...
-
Excelで空白セル直前のセルデー...
-
Excel UserForm の表示位置
-
EXCEL VBA 文中の書式ごと複写...
-
特定の色のついたセルを削除
-
VBA にて、条件付き書式で背景...
-
VBAでユーザーフォームにセル値...
-
【VBA】写真の貼り付けコードが...
-
【Excel VBA】一番右端セルまで...
-
Excel VBAでCheckboxの名前を変...
-
エクセルの合計を自動で表示さ...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA:日付を配列に入れ別セルに...
-
Excel VBA IF文がうまく動作し...
-
下記のマクロの説明(意味)を...
-
入力規則のリスト選択
-
C# DataGridViewで複数選択した...
-
関数の引数でrangeを指定したとき
おすすめ情報