エクセルのマクロで範囲名設定の記述を教えてください

このQ&Aのポイント
  • エクセルのマクロで範囲名を設定する方法を教えてください。
  • Lotus123時代に作成したマクロをエクセルに置き換えるのに苦労しています。範囲名を設定する方法がわかりません。
  • カーソルの位置に範囲名を設定する方法や、セル名の削除方法、可変な範囲名を設定する方法を教えてください。
回答を見る
  • ベストアンサー

エクセルのマクロで範囲名設定の記述を教えてください。

エクセルのマクロで範囲名設定の記述を教えてください。 Lotus123時代に作成したマクロを、エクセルに置き換えるのに苦労しています。 範囲名ということで、特定のセル(範囲)に名称をつける機能がありますが 「カーソルの現在位置に範囲名をつける」方法がわかりません。 自動記録で作成すると、範囲名のセルに絶対値が入ってしまい、 これを繰り返し記述すると、次の範囲名のセルもまた同じ場所になってしまいます。 たとえばカーソルを置いたスタート位置にいったんセル名(範囲名)をつけ、 作業後にジャンプでその位置に戻り、そのセル名を削除した後、 ひとつ右にうつった位置を次の戻り位置として再指定することを繰り返したいのです。 Lotusでは行ってきたのですがエクセルではなかなかうまく行きません。 ActiveWorkbook.Names.Add Name:="範囲名",RefersToR1C1:="=Sheet1!R11C5: R13C5 " 作業後ジャンプでこの範囲セルに戻り、このセル名を削除 カーソルを別の位置に動かして、そこに新しく同じ名前のセル名をつくる。 このときの記述をどう書くかということです。 「Sheet1!R11C5: R13C5」というのが常にカーソルを置いた位置に可変させたいのです。 エクセル初心者をよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.9

実操作を「新しいマクロの記録」すれば参考コードが得られます。 記録の開始 http://www.officepro.jp/excelmacro/rec/index1.html ファイルを選択する部分は下記ページを参考にしてください。 [ファイルを開く]ダイアログのフィルタリング http://www.officetanaka.net/excel/vba/tips/tips109.htm >便乗してしまってすみません。 お分かりのように新規で質問される内容です。 上手くいかなければ新規質問をなさってください。 本稿の問題点はクリアされましたか? クリアされたなら締め切り処理をお願いします。 クリアされていないなら遠慮なく追加質問してください。

noro6857
質問者

お礼

なんどもご丁寧にありがとうございました。 おかげさまで、少しずつ理解できたとともに、 懸案の作業がスムースにできるようになり感謝しております。 また機会がありましたらよろしくお願いいたします。

その他の回答 (8)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.8

≪アクティブセルのセル範囲を取得する一例≫ 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

noro6857
質問者

お礼

テキスト書き出しはチャレンジしてみようと思います。 エクセルはかなりお詳しそうなので、ファイルの読込みについてついでにお尋ねさせてください。 スペースで仕切られた1行2列(例:左にタイトル、右に作者名)のテキストファイルを取り込むことが多いのですが、 Lotusのときはテキストファィルをドラッグするだけで列単位で2つのセルに分けてくれましたが、 エクセルだとドラッグしても2列が1行扱いの1セルになってしまいます。 そこで、その都度次の作業をしているのですが、こういったものもマクロでワンキーで取り込む ことはできるのでしょうか。 (なお、左右の空間はタブでなく半角10文字くらいの空白の場合が多い) ----- ファィルメニュー「開く」を選択 (ファィルの種類でテキストを選択) テキストファィルを選択●(都度選択したい。一定の名前ではないが格納フォルダは固定可) 「開く」 「スペースによって…」を選択(常に同じ) 「次へ」 (フィールド幅の指定)●都度確認したい 「次へ」 G/標準(常に同じ) 「完了」(取り込み) 便乗してしまってすみません。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.7

>第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

noro6857
質問者

お礼

現在サポートで確認中のため、質問者本人のみ投稿内容をご覧いただけます。ご迷惑おかけいたしますが、しばらくお待ちください。
noro6857
質問者

補足

お礼の欄に参照シートを記入したら、「回答内容審査中」になってしまっため、こちらからお礼しておきます。 回答7でやってみました。 最初はどうしてもうまくゆかなかったのですが、 記述を読んでゆくうち列の指定がA&Fになっているのに気がつき、 実態のM Rに書き直してみたところ、バッシリうまくできました。 ご指示のとおり、どの列の1行目ににおいてもできました。 これを活用してゆきたいと思います。 記述の内容はまったく理解できないので、万一一部手直しなんてことになったらお手上げですが、 それまでに勉強したいと思います。 今回は、お忙しい中何回も作っていただいて本当に感謝しています。 ありがとうございました。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.6

>どちらも、選択範囲グループでなく最終グループのデータがCOPYDATAに入り、 >あわせてクリップボードにはまったく関係ない直前のクリップボードが残っていました。 表現が曖昧です。 クリップボードとはWindowsのクリップボードのことですね? COPYDATAの定義はどうなっていますか? コードを実行した時、アクティブセルのあるデータ範囲グループのデータがAA列でAA1以下に入るようになっています。 つまり、COPYDATAセル範囲には、選択範囲グループのデータが入っているはずです。 そして、COPYDATAのセル範囲をCopyしています。クリップボードにはこのデータが入っているはずです。 Ctrl+V で貼り付けてみてください。 ただし、先にも書きましたが、Excelのコピーモードが解除されるとクリップボードの内容は空になります。 >に関数を使ったデータが埋まっています。 >21行目から25行目までもエラー関数で埋まっていますが >グループごとにしわけるため >21行目(A~F)はセル内容を削除し空白セルとなっています。 G列は空白ではないのですか? 列はA~Fで固定ということですか? >各データをグループごとにつくり、その都度テキストデータに張り付けています。 テキストファイルに貼り付けているという事ですか? レベルが上がりますが、VBAでテキストファイルに書き込むことも可能です。 クリップボードに、直接データを格納することも可能です。 >スタート位置はグループごとの行数が不規則なので手動でカーソルをおきセルを特定してます) ということなら、作業開始セルに戻る必要性はないと思いますが、どうでしょうか?

noro6857
質問者

お礼

>表現が曖昧です 次のようなデータとした場合 第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グループ飛ばすなど必ずしも次のグループへ移行するわけではないためこのようにしています。

noro6857
質問者

補足

上記 A列1~F20列(第1グループ) というのは A列1行~20行から F列1~20行 の意味です。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.5

回答番号: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

noro6857
質問者

お礼

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)
回答No.4

>スタート位置(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.3

>どこかでわかるのでしょうか。 最初の書き込みの内容がメールで届いていました。 >回答番号: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

noro6857
質問者

お礼

重ね重ねありがとうございました。 前段のものをよく理解できないままにペーストしてマクロでやってみましたが 、ループ処理をしているせいで一瞬に終わりますね。 丹念に解読しながらこれを使ってみたいと思います。 ただ、私の記述分でも、今回のでもときどきあるのですが 最後のクリップボードの内容がAA1から最下段まで全部(すなわちA~Fまで) の場合と、最後の範囲であるFだけしか残らない場合とがあって どういう加減なのかよくわからないんです。 また後段のケース<下記でも同じ結果が得られると思います。> については、前回ご提示の場合もそうでしたが、 列とか行の指定をあらかじめする必要があるのでしょうか? COPY範囲(行)を指定するコマンドがどこにあるのか理解できぬまま、 このままペーストして実行みたらワークシート全体が1列整理されてしまいました。

noro6857
質問者

補足

すみません。 最後の状態がstart3へジャンプしているせいで、 左はじ(A列)の範囲指定で終わっているのですが これをスタート位置(F列1行目)にカーソルを戻したい場合、 どこを修正するのかちょっととまどっています。 お力を貸してください。 (データの位置はA列~F列、COPY順はF-E-D-C-A-B、 範囲は列内は同じですが、 グループごとに20~30行その都度異なる)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

おぼろげですが、やっていることが見えてきました。 とりあえず、提示されたコードを纏めてみましたがどうでしょうか。 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

noro6857
質問者

お礼

ありがとうございます。 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" ------------- このあと任意の位置にカーソルを動かし、再度スタート ところで、私の部分の記述は長いので省略し 私のコメントには記述していないのですが ご回答いただいた内容でそれが出てきているのですが どこかでわかるのでしょうか。

noro6857
質問者

補足

お礼コメントのうち、 列内の行数は1グループ内(A~E)は同一ですが、 各グループごとに異なります。 また列移動ですが、元データの都合上、 右から左に移動するほか、途中順列になっていません。 すなわちF-E-D-C-A-Bになり、カーソルの最後の位置はEの1行目になるようにしています。 また最後のテキストファィルへのペーストはエクセルでのDATAがクリップボードに入るように していて、 別のテキストエディタでは起動すると自動でクリップボードの内容が張り付けられるようになっています。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

外しているかもしれませんが >たとえばカーソルを置いたスタート位置にいったんセル名(範囲名)をつけ 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

noro6857
質問者

お礼

お礼が遅れてすみません。 一度書き込みをしておいたのですが、なぜか反映されていないため再書き込みします。 おかげさまで、範囲名「設定」と「変更」について、それぞれ1例めを記述してみたところ うまくゆきました。ありがとうございました。 なお、ついでで恐縮ですが、copy先の範囲を指定して、クリップボードにcopyしようとするのですが 直前のCopy内容しか反映されません。 lotusでは{EDIT-COPY}という記述をしていました。 エクセルでは次のようにしました。(COPYDATAという範囲名の1行目から最下行を範囲指定) Application.Goto Reference:="COPYDATA" Range(Selection, Selection.End(xlDown)).Select Selection.Copy クリップボードへ貼り付ける記述を教えていただけるとありがたいです。

関連するQ&A

  • エクセルマクロの記述について

    マクロの記述で、 Range(”G15”).Select ActiveCell.FormulaR1C1=”=シート名!R[-8]C[5]” というのは、どのような操作を表しているのでしょうか? どなたか教えて下さい。 よろしくお願いします。

  • エクセル2003 マクロ シート名

    エクセル2003です。 1つのブックにシートが10シート有ります。 R2のセルに日付を入れると それぞれのシート名が日付 (例)"11月25日"になるようなマクロを作りたいのですが、 教えてください。 又は逆にシート名に"11月25日"とすると R2セルが"11月25日"となるマクロを教えてください。 日付はシート毎に違います。 すみませんがよろしくおねがいします。

  • シートが変わるとマクロが働かない

    記録式マクロでセルに名前を付けるものを作りました。 しかし、その時のシート名が記録されたため、他のシートで使えません。 Sub Macro1() ActiveWorkbook.Names.Add Name:="参照A", RefersToR1C1:="='2-28'!R1C8" End Sub シート名が「2-28」でないと、「3-01」などだと使えません。。 そのとき開いているシートどれにでも通用させるにはどう書き換えるんでしょうか?

  • マクロの記述について質問

    例えばマクロの記述が「X」だとして、 XXXXXXXXXXXXXXXXXXXXXXX XXXXXXシート名XXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX のシート名を参照する記述はどうすればいいでしょうか? シート名とは、マクロを実行するセルのある1シートのみです。 あと、ショートカットキーか何かでマクロを実行する方法があれば教えてください。

  • 検索の方法(エクセル マクロ)

    マクロは記録マクロしかできない超初心者です。 エクセルのsheet1のA1のセルに入っている内容(都度変更)と同一のセルをsheet2で検索し、カーソルをそこに移動させるマクロ記述をしたいのですが、どうなりますか。 記録マクロで、sheet1のA1をコピーし、sheet2に移動して検索窓で貼り付けて「次を検索」とやったのですが、記述をみるとA1の内容がそのまま記述されていて汎用性が無いようです。 よろしくお願いいたします。

  • エクセルのマクロがどこに格納されているのか分かりません

    Excel2003です。エクセルを開く際にマクロの有効・無効を問うセキュリティ警告が出ます。ですのでこのファイルにマクロが含まれているのは間違いないと思います。 ゴールシークを実行するごく簡単なマクロなのですが、マクロのモジュールがどこに格納されているか分かりません。おそらく基本が分かっていないのだと思いますが、ご教示くださいませ。 ツール-マクロ-VBEを立ち上げると、プロジェクトエクスプローラに表示されるのは次のとおりで、モジュールが表示されません。 funcres (FUNCRES.XLA) VBAProject (ファイル名.xls) └Microsoft Excel Objects  └Sheet1 (Sheet1)  └ThisWorkbook このファイルは2枚のシートで構成されており、計算式などが記述されているSheet1と下記3行の記述があるMacro1です。 ツール-マクロ-マクロ-編集を実行すると、Macro1シートのセルに飛びます。そのシートには1列3行の記述があり、次のとおりです。マクロの実行で飛ぶのは一番上の行です。 Record1 =GOAL.SEEK("R4C5",0,"R4C8") =RETURN() ちなみに"R4C5"に記入されているのが式、"R4C8"に記入されているのが変数、式の値の収束目標値はゼロです。 Record1が記入されているセルは名前が定義されています。名前はRecord1です。 何となくVBEのモジュールに記載されるはずのものがMacro1シートに記述されているような気がしますが、よく分かりません。参考書などを引いたのですが、分かりませんでした。等号があるので関数かと思いましたが、GOAL.SEEKやRETURNという関数はありませんでした。 要領の悪い質問で申し訳ありませんが、ご教示よろしくお願いいたします。

  • エクセルマクロを教えてください

    エクセル2003を使用しています。ブックに1シートあります。シート名は「C3」セルに入力してある日付にしますが、シート上の表示形式は「平成20年1月」となっているところをシート名は「08-01」にします。その後シートを11枚コピーし、それぞれのシートの「C3」セルに年月を入力し、シート名を「08-02」「08-03」・・・「08-12」としたいのですが、うまくいきません。 マクロに詳しい方のご指導をお願いいたします。

  • エクセルのマクロについて教えてください。

    エクセルのマクロについて教えてください。 Sheet名「1週」~「16週」の それぞれE5~E55、AC5~AC55,BA5~BA55,BY5~BY55,CW5~CW55,DU5~DU55,ES5~ES55 の値が変更されたら、そのそれぞれのセルの2つ右と、4つ右に Sheet名[データ]のC24とE24のデータを値の貼り付けで入力したいと思います。 具体的にやりたい操作がわかっているのですが、それをマクロにするのが難しくて、困っています。 具体的にどう記述すればよいか、教えていただけないでしょうか? WorkSheet Changeイベントに記述すればいいのだろうなぁまではわかっています。

  • excel マクロでの繰り返し作業

    初めまして、質問内容が凄く稚拙で怒られるかもしれませんが どうしても分からなくて急いでいる為ここに投稿させて頂きました。 Excelでのマクロについてなのですが、 ActiveCell.FormulaR1C1 = "=SUM(R[-1]C[-1]:RC[-1])" をセルA1~A50000まで繰り返すといったような作業はどのような式にすればいいのでしょうか? セルを指定したりクリックしたセルに実行するのは簡単なのですが、 ここからここまで・・といった範囲で繰り返す式がわかりません。 教えて頂ける方がいたらどうかお願いします・・。

  • エクセルのマクロでセル選択するには

    初心者です! エクセルのSheet1に30箇所のセルをマクロで選択したいのですが、 たまに選択するセルが変わります。 そこで、Sheet2のA1から下へSheet1の選択する位置を「B2」「C5」「D10」・・・としてマクロで一発で30箇所のセルを選択する方法を教えてください Sheet2のA1から下へ入力するセル位置はその都度変化します。 変化したときにそのマクロを実行すると選択できるといいのですが!! よろしくお願いします。

専門家に質問してみよう