
現在開いているブックの任意のセルから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.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さんのように温かく投げださず教えてくれる方が居ることは非常に有難く心強く感じます。
今後も質問をさせて頂く事と思いますが、見かけたときはまたご教授頂ければ幸いです。
今後ともよろしくお願いします。
ありがとうございました。
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
お探しの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も見ています
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
5
表にフィルターをかけ、絞ったデータ(可視化セルのみ)を一次元配列として変数に入れるという動作を書きた
Visual Basic(VBA)
-
6
Excel VBAで同じフォルダ内のファイルを開くには?
Excel(エクセル)
-
7
エクセルVBAでオートフィルター最上行を取得するには
Excel(エクセル)
-
8
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
9
Excel VBA アクティブセルからある一定のセルまでの範囲選択
Excel(エクセル)
-
10
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
11
UserForm1.Showでエラーになります。
工学
-
12
Excelで指定した日付から過去の最も近い日付(指定した日付も含む)を下から検索する方法
Visual Basic(VBA)
-
13
【vba】指定範囲の中に任意の文字があるときの条件分岐
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
Excel UserForm の表示位置
-
C# DataGridViewで複数選択した...
-
特定の色のついたセルを削除
-
【VBA】【ユーザーフォーム_Lis...
-
エクセルVBA 配列からセルに「...
-
DataGridViewのフォーカス遷移...
-
セルの半透明着色処理
-
複数指定セルの可視セルのみを...
-
【Excel VBA】マクロで書き込ん...
-
Excel VBA IF文がうまく動作し...
-
【ExcelVBA】値を変更しながら...
-
Excelで空白セル直前のセルデー...
-
VBA:日付を配列に入れ別セルに...
-
Excel 範囲指定スクショについ...
-
エクセルのカーソルを非表示に...
-
入力規則のリスト選択
-
CellEnterイベント仕様について
-
DataGridViewでグリッド内に線...
-
【VBA】写真の貼り付けコードが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
特定の色のついたセルを削除
-
Excelで空白セル直前のセルデー...
-
Excel UserForm の表示位置
-
エクセルVBA 配列からセルに「...
-
VBA:日付を配列に入れ別セルに...
-
エクセル、マクロで番号を読込...
-
【Excel VBA】一番右端セルまで...
-
【VBA】写真の貼り付けコードが...
-
【ExcelVBA】値を変更しながら...
-
【VBA】【ユーザーフォーム_Lis...
-
DataGridViewのフォーカス遷移...
-
EXCEL VBA 文中の書式ごと複写...
-
データグリッドビューの結合セ...
-
複数指定セルの可視セルのみを...
-
QRコード作成マクロについて
-
C# DataGridViewで複数選択した...
-
Excel 範囲指定スクショについ...
-
エクセル VBA ボタンをクリック...
-
DataGridViewでグリッド内に線...
おすすめ情報