
現在開いているブックの任意のセルから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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
5
UserForm1.Showでエラーになります。
工学
-
6
VBAで繰り返しコピーしながら下へ移動させる方法
Excel(エクセル)
-
7
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
8
Excelで、activecellから最終列まで選択するvbaはどうすれば?
Excel(エクセル)
-
9
VBAで文字列を数値に変換したい
Excel(エクセル)
-
10
Excel VBA アクティブセルからある一定のセルまでの範囲選択
Excel(エクセル)
-
11
Excel VBAで同じフォルダ内のファイルを開くには?
Excel(エクセル)
-
12
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
13
excelのマクロで該当処理できなければ飛ばして進むにはどうすればよいのでしょうか
Visual Basic(VBA)
-
14
別のシートから値を取得するとき
Visual Basic(VBA)
-
15
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
16
【Excel VBA】一番右端セルまでの範囲指定の仕方(途中に空白セルあり)
Visual Basic(VBA)
-
17
数式の結果が空白の時の空白扱い
Excel(エクセル)
-
18
【VBA】特定列に文字が入っていたらそのセル行をコピーしてマスターブックの同じ行に貼り付けたい
その他(Microsoft Office)
-
19
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
20
エクセルVBAで一つ上の階層を指定して保存したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel UserForm の表示位置
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
【VBA】【ユーザーフォーム_Lis...
-
特定の色のついたセルを削除
-
C# DataGridViewで複数選択した...
-
EXCELのフォーム上でリアルタイ...
-
Excel VBA IF文がうまく動作し...
-
エクセル VBA ボタンをクリック...
-
[C#]DataGridViewのVirtual Mod...
-
DataGridViewのカレントセル内...
-
エクセル VBA 条件付き転記
-
入力規則のリスト選択
-
Excel VBAでCheckboxの名前を変...
-
MATLABのポップアップメニュー...
-
下記のマクロの説明(意味)を...
-
Excelで空白セル直前のセルデー...
-
DataGridViewのフォーカス遷移...
-
Excelのセルから日付情報を取得...
-
csvファイルの特定のセルから読...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel UserForm の表示位置
-
VBAマクロ実行時エラーの修正に...
-
Excelで空白セル直前のセルデー...
-
エクセルVBA 配列からセルに「...
-
特定の色のついたセルを削除
-
C# DataGridViewで複数選択した...
-
【VBA】【ユーザーフォーム_Lis...
-
データグリッドビューの結合セ...
-
【VBA】写真の貼り付けコードが...
-
VBA:日付を配列に入れ別セルに...
-
入力規則のリスト選択
-
セルの半透明着色処理
-
EXCEL VBA 文中の書式ごと複写...
-
Excel VBAでCheckboxの名前を変...
-
【ExcelVBA】値を変更しながら...
-
【Excel VBA】一番右端セルまで...
-
エクセルのカーソルを非表示に...
-
DataGridViewのフォーカス遷移...
-
DataGridViewでグリッド内に線...
-
Excel VBA でFunctionプロシジ...
おすすめ情報