- ベストアンサー
エクセルのマクロで範囲名設定の記述を教えてください
- エクセルのマクロで範囲名を設定する方法を教えてください。
- Lotus123時代に作成したマクロをエクセルに置き換えるのに苦労しています。範囲名を設定する方法がわかりません。
- カーソルの位置に範囲名を設定する方法や、セル名の削除方法、可変な範囲名を設定する方法を教えてください。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
実操作を「新しいマクロの記録」すれば参考コードが得られます。 記録の開始 http://www.officepro.jp/excelmacro/rec/index1.html ファイルを選択する部分は下記ページを参考にしてください。 [ファイルを開く]ダイアログのフィルタリング http://www.officetanaka.net/excel/vba/tips/tips109.htm >便乗してしまってすみません。 お分かりのように新規で質問される内容です。 上手くいかなければ新規質問をなさってください。 本稿の問題点はクリアされましたか? クリアされたなら締め切り処理をお願いします。 クリアされていないなら遠慮なく追加質問してください。
その他の回答 (8)
- xls88
- ベストアンサー率56% (669/1189)
≪アクティブセルのセル範囲を取得する一例≫ Areasプロパティを使います。 処理対象グループ内の、適当なデータ表示セルを選択して置いて、実行してください。 Dim rng As Range Dim rnga As Range Dim a As Range '//選択セルが、A~F列以外なら実行を中止 If Intersect(ActiveCell, Columns("A:F")) Is Nothing Then Exit Sub '//選択セルが、エラーなら実行を中止 If IsError(ActiveCell) Then Exit Sub '//選択セルが、空白なら実行を中止 If ActiveCell.Value = "" Then Exit Sub '//対象セル範囲 Set rng = Range("A1", Range("F" & Rows.Count).End(xlUp)) '//対象セル範囲内の数式セル範囲(エラー値セル、空白セル除外) Set rng = rng.SpecialCells(xlCellTypeFormulas, 7) '//処理対象セル範囲(アクティブセルがあるエリア) For Each a In rng.Areas If Not Intersect(ActiveCell, a) Is Nothing Then Set rnga = a Exit For End If Next MsgBox rnga.Address Set rng = Nothing: Set rnga = Nothing ≪テキストファイルに書き込む方法≫ 下記ページの「テキストファイルに書き出す・読み込む」で紹介されています。 マクロの裏技 http://www.winboys.net/howtoxls/xlsfnk4.htm
お礼
テキスト書き出しはチャレンジしてみようと思います。 エクセルはかなりお詳しそうなので、ファイルの読込みについてついでにお尋ねさせてください。 スペースで仕切られた1行2列(例:左にタイトル、右に作者名)のテキストファイルを取り込むことが多いのですが、 Lotusのときはテキストファィルをドラッグするだけで列単位で2つのセルに分けてくれましたが、 エクセルだとドラッグしても2列が1行扱いの1セルになってしまいます。 そこで、その都度次の作業をしているのですが、こういったものもマクロでワンキーで取り込む ことはできるのでしょうか。 (なお、左右の空間はタブでなく半角10文字くらいの空白の場合が多い) ----- ファィルメニュー「開く」を選択 (ファィルの種類でテキストを選択) テキストファィルを選択●(都度選択したい。一定の名前ではないが格納フォルダは固定可) 「開く」 「スペースによって…」を選択(常に同じ) 「次へ」 (フィールド幅の指定)●都度確認したい 「次へ」 G/標準(常に同じ) 「完了」(取り込み) 便乗してしまってすみません。
- xls88
- ベストアンサー率56% (669/1189)
>第1グループのデータ集約(F1からのスタート)をしたらCOPYDATAには第4グループのデータが入っていたということです。 全く同じ環境を用意できないので確認ができません。 少なくとも当方のテスト環境では無問題です。 念のためにお聞きしますが、 手動(あるいは別のプログラム)でコピー操作をしているというようなことはないですか? エラー値表示セルとデータ表示セルは矩形範囲で固まっているのですか? 試しにクリップボードに入れてみました。 noro6857さんのコードからは離れますが試してみてください。 これまで、徐々に解ったことを反映しているつもりです。 各グループの先頭行なら、どの列のセルを選択していても、動くようにしています。 事前に、VBEの、ツールメニュー>参照設定で Microsoft Forms 2.0 Object Libraryにチェック入れてOK で参照設定をする必要があります。 クリップボードを操作する(1) http://www.officetanaka.net/excel/vba/tips/tips20.htm Dim buf As String, buf2 As String, CB As New DataObject Dim rng As Range 'データセル範囲 Dim c As Range 'データセル Dim n As Integer 'データセル範囲の列数 Dim i As Integer 'ループカウンター Dim x As Integer 'オフセット量 '//選択セルが対象列範囲外なら中止 If Intersect(ActiveCell, Columns("A:F")) Is Nothing Then Exit Sub '//旧抽出データ消去 Range("AA1:AA500").ClearContents '//データ表示数式セル範囲の取得(エラー表示セルは除外) Set rng = Range("A" & ActiveCell.Row, "F" & ActiveCell.End(xlDown).Row) Set rng = rng.SpecialCells(xlCellTypeFormulas, 7) n = rng.Columns.Count '//データ抽出 For i = n To 1 Step -1 Select Case i Case 2: x = 1 Case 1: x = 2 Case Else: x = i End Select For Each c In Range(rng.Columns(x).Address) buf = buf & vbCrLf & c.Value Next Next i buf = Replace(buf, vbCrLf, "", 1, 1) '//クリップボードに格納 With CB .SetText buf .PutInClipboard .GetFromClipboard End With '//データ貼り付け(確認用) ActiveSheet.Paste Destination:=Range("AA1") Set rng = Nothing
お礼
補足
お礼の欄に参照シートを記入したら、「回答内容審査中」になってしまっため、こちらからお礼しておきます。 回答7でやってみました。 最初はどうしてもうまくゆかなかったのですが、 記述を読んでゆくうち列の指定がA&Fになっているのに気がつき、 実態のM Rに書き直してみたところ、バッシリうまくできました。 ご指示のとおり、どの列の1行目ににおいてもできました。 これを活用してゆきたいと思います。 記述の内容はまったく理解できないので、万一一部手直しなんてことになったらお手上げですが、 それまでに勉強したいと思います。 今回は、お忙しい中何回も作っていただいて本当に感謝しています。 ありがとうございました。
- xls88
- ベストアンサー率56% (669/1189)
>どちらも、選択範囲グループでなく最終グループのデータがCOPYDATAに入り、 >あわせてクリップボードにはまったく関係ない直前のクリップボードが残っていました。 表現が曖昧です。 クリップボードとはWindowsのクリップボードのことですね? COPYDATAの定義はどうなっていますか? コードを実行した時、アクティブセルのあるデータ範囲グループのデータがAA列でAA1以下に入るようになっています。 つまり、COPYDATAセル範囲には、選択範囲グループのデータが入っているはずです。 そして、COPYDATAのセル範囲をCopyしています。クリップボードにはこのデータが入っているはずです。 Ctrl+V で貼り付けてみてください。 ただし、先にも書きましたが、Excelのコピーモードが解除されるとクリップボードの内容は空になります。 >に関数を使ったデータが埋まっています。 >21行目から25行目までもエラー関数で埋まっていますが >グループごとにしわけるため >21行目(A~F)はセル内容を削除し空白セルとなっています。 G列は空白ではないのですか? 列はA~Fで固定ということですか? >各データをグループごとにつくり、その都度テキストデータに張り付けています。 テキストファイルに貼り付けているという事ですか? レベルが上がりますが、VBAでテキストファイルに書き込むことも可能です。 クリップボードに、直接データを格納することも可能です。 >スタート位置はグループごとの行数が不規則なので手動でカーソルをおきセルを特定してます) ということなら、作業開始セルに戻る必要性はないと思いますが、どうでしょうか?
お礼
>表現が曖昧です 次のようなデータとした場合 第1グループのデータ集約(F1からのスタート)をしたらCOPYDATAには第4グループのデータが入っていたということです。このためCOPY+Vでも同じものになります。 A列1~F20列(第1グループ) A列25~F40列(第2グループ) A列51~F80列(第3グループ) A列101~F150列(第4グループ) COPYDATAの定義はAA1のセル指定です。 なお、先の最終範囲内のみがクリップされることがあるというのは、COPYDATAにはA1~F20がすべてCOPYされているのになぜかクリップボード(windows)にはA列1~20のみが入っていることがときどきあるということです。これは私の作ったマクロでも発生していました。 >G列は空白ではないのですか? 実は便宜上A~F列と説明していますが 実際にはM列からR列までで、 その前後(L列、S列)にもデータが入っています。 すなわち上下は空白セルで止めていますが 左右は止まりません。 >テキストファイルに貼り付けて 保存用にテキストファィル(EM-editor使用)を使っています。 EM-editorにもマクロ機能があって書き込みと同時に別のマクロを操作させています。 たぶんエクセルからのVBAを使うと自動書き込みも可能かと思いますが、よくわからないので、この分はマニュアル操作です >作業開始セルに戻る必要性 F列のところにあれば、次のスタートがF列のため、カーソルを下にずらせばいいのですが、A列とかB列にあると、下と右の2回ずらすことになるので手間をはぶきたいだけです。 たぶん、マクロで次のグループのスタート位置へ置くことも可能かと思いますが、1グループ飛ばすなど必ずしも次のグループへ移行するわけではないためこのようにしています。
補足
上記 A列1~F20列(第1グループ) というのは A列1行~20行から F列1~20行 の意味です。
- xls88
- ベストアンサー率56% (669/1189)
回答番号:No.4に追記です。 A列~F列で、各列毎に行数が異なる、ということなら Range("start3", Range("start3").End(xlDown)).Offset(, -x).Copy を Range(Range("start3").Offset(, -x), Range("start3").Offset(, -x).End(xlDown)).Copy と変更してください。 ≪定義名を使わない例≫です。 Dim adre As String Dim lcl As String Dim rngs As Range Dim rngc As Range Dim rngp As Range Dim i As Integer Dim x As Integer Dim n As Integer '//F列でなければ実行しない If ActiveCell.Column <> 6 Then Exit Sub '//貼り付け先データ消去 Range("AA1:AA500").ClearContents '//開始セル Set rngs = ActiveCell '//コピー元列数取得 n = Range(rngs, rngs.End(xlToLeft)).Columns.Count '//データを転記 For i = 0 To n - 1 '//コピー元 Select Case i Case n - 2: x = n - 1 Case n - 1: x = n - 2 Case Else: x = i End Select Set rngc = Range(rngs.Offset(, -x), rngs.Offset(, -x).End(xlDown)) '//貼り付け先 Select Case i Case 0: Set rngp = Range("AA1") Case Else: Set rngp = Range("AA1").End(xlDown).Offset(1) End Select '//値貼り付け rngp.Resize(rngc.Rows.Count, rngc.Columns.Count).Value = rngc.Value Next i '//転記データをコピー Range("AA1", Range("AA1").End(xlDown)).Copy Set rngs = Nothing: Set rngc = Nothing: Set rngp = Nothing
お礼
No4とNo5については、横着してそのままペーストしてマクロを作って実行してみたのですが どちらも、選択範囲グループでなく最終グループのデータがCOPYDATAに入り、 あわせてクリップボードにはまったく関係ない直前のクリップボードが残っていました。 //転記データをコピー Range("AA1", Range("AA1").End(xlDown)).Copy の部分は前回と同じようなので、途中のどこかで…? No3(ループ処理)のものはうまくゆきました。(これに最終カーソル位置が入れば可) ちなみにデータのイメージがわかないかと思いますので データは 第1グループ A1~A20 B1~B20 C1~C20 D1~D20 E1~E20 F1~F20 に関数を使ったデータが埋まっています。 21行目から25行目までもエラー関数で埋まっていますが グループごとにしわけるため 21行目(A~F)はセル内容を削除し空白セルとなっています。 したがって、END DOUNで範囲が特定されます。 F1からスターさせ、A20までの内容(計120セル分)をCOPYDATAに1列にしています。 次のグループは26行目からたとえば50行目までとし、51行目に空白行を作ります。 そしてスタートはF26になります。 (スタート位置はグループごとの行数が不規則なので手動でカーソルをおきセルを特定してます) このように繰り返し 各データをグループごとにつくり、その都度テキストデータに張り付けています。
- xls88
- ベストアンサー率56% (669/1189)
>スタート位置(F列1行目)にカーソルを戻したい 定義名の設定を変更しないようにしてみました。 Dim adre As String Dim lcl As String Dim rng As Range Dim i As Integer Dim x As Integer Dim n As Integer '//F列でなければ実行しない If ActiveCell.Column <> 6 Then Exit Sub '//コピー元列数取得 n = Range(Selection, Selection.End(xlToLeft)).Columns.Count '//貼り付け先データ消去 Range("AA1:AA500").ClearContents '//名前を定義 adre = ActiveCell.Address lcl = "=" & ActiveSheet.Name & "!" & adre ActiveWorkbook.Names.Add Name:="start3", RefersTo:=lcl '//データを転記 For i = 0 To n - 1 '//コピー Select Case i Case n - 2: x = n - 1 Case n - 1: x = n - 2 Case Else: x = i End Select Range("start3", Range("start3").End(xlDown)).Offset(, -x).Copy '//貼り付け Select Case i Case 0: Set rng = Range("COPYDATA") Case Else: Set rng = Range("COPYDATA").End(xlDown).Offset(1, 0) End Select rng.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False Next i '//転記データをコピー Range("COPYDATA", Range("COPYDATA").End(xlDown)).Copy '//名前定義セルを選択 'Application.Goto Reference:="start3" Range("start3").Select Set rng = Nothing >範囲は列内は同じですが、グループごとに20~30行その都度異なる グループとは、各列単位という認識で良かったですか? >最後のクリップボードの内容がAA1から最下段まで全部(すなわちA~Fまで) >の場合と、最後の範囲であるFだけしか残らない場合とがあって 下記で転記データをコピーしています。 Range("COPYDATA", Range("COPYDATA").End(xlDown)).Copy 従って、"COPYDATA"がAA1固定なら問題ないはずです。 ただし、セルをコピーしています。Escキー押し下げ等で、コピーモードが解除されると、クリップボードが空になります。 >列とか行の指定をあらかじめする必要があるのでしょうか? Set rng = ActiveCell.CurrentRegion 上記で、データセル範囲内を取得しようとしています。 データセル範囲内の、セルが選択されていれば、空白セルで囲まれた矩形範囲が取得されます。 データセル範囲が空白セルで囲まれていない場合、不要なセル範囲も含まれるので使えません。
- xls88
- ベストアンサー率56% (669/1189)
>どこかでわかるのでしょうか。 最初の書き込みの内容がメールで届いていました。 >回答番号:No.2 この回答への補足 上記で解ったことをコードに反映してみました。 定義名"COPYDATA"は、貼り付け先の先頭セルと解しています。 Dim adre As String Dim lcl As String Dim newlcl As String Dim i As Integer Dim x As Integer Range("AA1:AA500").ClearContents '//名前の定義 adre = Range(Selection, Selection.End(xlDown)).Address lcl = "=" & ActiveSheet.Name & "!" & adre ActiveWorkbook.Names.Add Name:="start3", RefersTo:=lcl '//コピー&貼り付けループ処理 For i = 1 To 6 '/コピー&貼り付け Range("start3").Copy If i = 1 Then Range("COPYDATA").PasteSpecial _ Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Else Range("COPYDATA").End(xlDown).Offset(1, 0).PasteSpecial _ Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End If '/移動量 Select Case i Case 4: x = -2 Case 5: x = 1 Case Else: x = -1 End Select '/名前の定義設定変更 newlcl = "=" & ActiveSheet.Name & "!" & Range("start3").Offset(, x).Address ActiveWorkbook.Names("start3").RefersTo = newlcl Next i '//転記データをコピー Range("COPYDATA", Range("COPYDATA").End(xlDown)).Copy '//名前の定義セル範囲へジャンプ Application.Goto Reference:="start3" 下記でも同じ結果が得られると思います。 Dim rng As Range 'データセル範囲 Dim c As Integer 'rngの列数 Dim r As Integer 'rngの行数 Dim i As Integer 'ループカウンター Dim x As Integer 'オフセット量 Range("AA1:AA500").ClearContents Set rng = ActiveCell.CurrentRegion c = rng.Columns.Count r = rng.Rows.Count For i = 0 To c - 1 Select Case i Case c - 2: x = c - 1 Case c - 1: x = c - 2 Case Else: x = i End Select Range("AA1").Resize(r).Offset(i * r).Value = rng.Columns(c - x).Value Next i Range("AA1", Range("AA1").End(xlDown)).Copy Set rng = Nothing
お礼
重ね重ねありがとうございました。 前段のものをよく理解できないままにペーストしてマクロでやってみましたが 、ループ処理をしているせいで一瞬に終わりますね。 丹念に解読しながらこれを使ってみたいと思います。 ただ、私の記述分でも、今回のでもときどきあるのですが 最後のクリップボードの内容がAA1から最下段まで全部(すなわちA~Fまで) の場合と、最後の範囲であるFだけしか残らない場合とがあって どういう加減なのかよくわからないんです。 また後段のケース<下記でも同じ結果が得られると思います。> については、前回ご提示の場合もそうでしたが、 列とか行の指定をあらかじめする必要があるのでしょうか? COPY範囲(行)を指定するコマンドがどこにあるのか理解できぬまま、 このままペーストして実行みたらワークシート全体が1列整理されてしまいました。
補足
すみません。 最後の状態がstart3へジャンプしているせいで、 左はじ(A列)の範囲指定で終わっているのですが これをスタート位置(F列1行目)にカーソルを戻したい場合、 どこを修正するのかちょっととまどっています。 お力を貸してください。 (データの位置はA列~F列、COPY順はF-E-D-C-A-B、 範囲は列内は同じですが、 グループごとに20~30行その都度異なる)
- xls88
- ベストアンサー率56% (669/1189)
おぼろげですが、やっていることが見えてきました。 とりあえず、提示されたコードを纏めてみましたがどうでしょうか。 Dim newlcl As String Dim i As Integer Range("AA1:AA500").ClearContents '/名前定義 newlcl = "=" & ActiveSheet.Name & "!" & ActiveCell.End(xlDown).Address ActiveWorkbook.Names.Add Name:="start3", RefersTo:=newlcl '/コピー&貼り付け Range("start3").Copy Range("COPYDATA").PasteSpecial _ Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False '/コピー&貼り付けループ処理 For i = 1 To 4 'ループごとに"start3"からi列オフセットした範囲をCopy Range("start3", Range("start3").End(xlDown)).Offset(, i).Copy '値で貼り付け Range("COPYDATA").End(xlDown).Offset(1, 0).PasteSpecial _ Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Next i '/コピーモード解除 Application.CutCopyMode = xlCopy 上記のようなことなら、名前の定義を使わなくても出来ると思います。 定義名"start3"と"COPYDATA"は同一シートにあるのですか? 例えば下記のコードですが、 元のデータを、列単位で、AA1以下1列に、値で転記します。 Dim rng As Range 'データセル範囲 Dim c As Integer 'rngの列数 Dim r As Integer 'rngの行数 Dim i As Integer 'ループカウンター Range("AA1:AA500").ClearContents Set rng = ActiveCell.CurrentRegion MsgBox rng.Address 'データセル範囲の確認 c = rng.Columns.Count r = rng.Rows.Count For i = 0 To c - 1 Range("AA1").Resize(r).Offset(i * r).Value = rng.Columns(i + 1).Value Next i Set rng = Nothing
お礼
ありがとうございます。 No2についてはまだ、試していませんが取り急ぎ前回のご回答に基づいた 現在までの内容です。 5列20~30行のデータを1列ずつ順にcopyし、それを別の場所(copydata)に 上から順次1列にまとめるものです。Lotus1-2-3では '{APPENDBELOW DATA,COPYDATA}(最下行に追記マクロ) (いったんDATAに移したあとCOPYDATAの最下行に追記する。DATAは追記の都度クリヤ)) エクセルでは追記マクロがなさそうなのでend、shiftdownでやってます。 ひととおりおわると1列にまとまったデータ(COPYDATA)を手動でテキストファイルにペースト。 そのあと再度別の列から同様の作業 すべて1のsheet内で行っています。 ----------- ※~※は3回繰り返します。(列移動は右から左に行っています) Range("AA1:AA500").ClearContents Dim newlcl As String newlcl = "=" & ActiveSheet.Name & "!" & ActiveCell.Resize(1, 1).Address ActiveWorkbook.Names.Add Name:="start3", RefersTo:=newlcl Range(Selection, Selection.End(xlDown)).Select Selection.Copy Application.Goto Reference:="COPYDATA" Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ※ Application.Goto Reference:="start3" newrflcl = "=" & ActiveSheet.Name & "!" & Selection.Offset(, -1).Address ActiveWorkbook.Names("start3").RefersTo = newrflcl Application.Goto Reference:="start3" Range(Selection, Selection.End(xlDown)).Select Selection.Copy Application.Goto Reference:="COPYDATA" Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Activate Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ※ Application.Goto Reference:="start3" newrflcl = "=" & ActiveSheet.Name & "!" & Selection.Offset(, 4).Address ActiveWorkbook.Names("start3").RefersTo = newrflcl Application.Goto Reference:="COPYDATA" Range(Selection, Selection.End(xlDown)).Select Selection.Copy Application.Goto Reference:="start3" ------------- このあと任意の位置にカーソルを動かし、再度スタート ところで、私の部分の記述は長いので省略し 私のコメントには記述していないのですが ご回答いただいた内容でそれが出てきているのですが どこかでわかるのでしょうか。
補足
お礼コメントのうち、 列内の行数は1グループ内(A~E)は同一ですが、 各グループごとに異なります。 また列移動ですが、元データの都合上、 右から左に移動するほか、途中順列になっていません。 すなわちF-E-D-C-A-Bになり、カーソルの最後の位置はEの1行目になるようにしています。 また最後のテキストファィルへのペーストはエクセルでのDATAがクリップボードに入るように していて、 別のテキストエディタでは起動すると自動でクリップボードの内容が張り付けられるようになっています。
- xls88
- ベストアンサー率56% (669/1189)
外しているかもしれませんが >たとえばカーソルを置いたスタート位置にいったんセル名(範囲名)をつけ Dim newlcl As String newlcl = "=" & ActiveSheet.Name & "!" & ActiveCell.Resize(3, 1).Address ActiveWorkbook.Names.Add Name:="範囲名", RefersTo:=newlcl あるいは Dim newlcl As String newlcl = "=" & ActiveSheet.Name & "!" & Selection.Address ActiveWorkbook.Names.Add Name:="範囲名", RefersTo:=newlcl ということでしょうか。 >作業後にジャンプでその位置に戻り、そのセル名を削除した後、 >ひとつ右にうつった位置を次の戻り位置として再指定することを繰り返したいのです。 削除ではなく変更の例です。 A1形式でやってみました。 ≪ひとつ横にずらす例≫ Dim newrflcl As String Application.Goto Reference:="範囲名" newrflcl = "=" & ActiveSheet.Name & "!" & Selection.Offset(, 1).Address ActiveWorkbook.Names("範囲名").RefersTo = newrflcl ≪もう一例≫ Dim rflcl As String Dim rfrng As String Dim newlcl As String Dim newrng As String Application.Goto Reference:="範囲名" rflcl = ActiveWorkbook.Names("範囲名").RefersToLocal rfrng = Split(rflcl, "!")(1) newrng = Range(rfrng).Offset(, 1).Address newlcl = Replace(rflcl, rfrng, newrng) ActiveWorkbook.Names("範囲名").RefersTo = newlcl >「Sheet1!R11C5: R13C5」というのが常にカーソルを置いた位置に可変させたいのです。 Dim rflcl As String Dim newlcl As String Dim rfrng As String Dim newrng As String Dim rer As Long Dim rec As Long rflcl = ActiveWorkbook.Names("範囲名").RefersToLocal rfrng = Split(rflcl, "!")(1) rer = Range(rfrng).Rows.Count rec = Range(rfrng).Columns.Count newrng = ActiveCell.Resize(rer, rec).Address newlcl = Replace(rflcl, rfrng, newrng) ActiveWorkbook.Names("範囲名").RefersTo = newlcl
お礼
お礼が遅れてすみません。 一度書き込みをしておいたのですが、なぜか反映されていないため再書き込みします。 おかげさまで、範囲名「設定」と「変更」について、それぞれ1例めを記述してみたところ うまくゆきました。ありがとうございました。 なお、ついでで恐縮ですが、copy先の範囲を指定して、クリップボードにcopyしようとするのですが 直前のCopy内容しか反映されません。 lotusでは{EDIT-COPY}という記述をしていました。 エクセルでは次のようにしました。(COPYDATAという範囲名の1行目から最下行を範囲指定) Application.Goto Reference:="COPYDATA" Range(Selection, Selection.End(xlDown)).Select Selection.Copy クリップボードへ貼り付ける記述を教えていただけるとありがたいです。
お礼
なんどもご丁寧にありがとうございました。 おかげさまで、少しずつ理解できたとともに、 懸案の作業がスムースにできるようになり感謝しております。 また機会がありましたらよろしくお願いいたします。