- ベストアンサー
エクセルのセルの長さが可変のデータに、一番上のデータの名前を定義する方法
- エクセルのセルの長さが可変のデータに、それぞれ一番上のデータの名前を定義する方法を教えてください。
- エクセルのセルの長さが可変のデータに、一番上のデータの名前を定義する方法を教えてください。
- エクセルのセルの長さが可変のデータに、それぞれ一番上のデータの名前を定義する方法を知りたいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>一番上の行の値を名前の定義で2行目~n行目につけたいんです。 変更してみましたので、試してみてください Sub Macro1() Dim i For i = 1 To Cells(1, Columns.Count).End(xlToLeft).Column ActiveWorkbook.Names.Add Name:=Cells(1, i).Value, _ RefersTo:="=" & Range(Cells(2, i), Cells(Rows.Count, i).End(xlUp)).Address Next i End Sub
その他の回答 (4)
- mitarashi
- ベストアンサー率59% (574/965)
#1です。修正漏れがありました。汗顔の至りです。 同じデータ構造のシートをコピーしてテストしたので、元のシートを参照しているのに気付きませんでした。 なお、データを後から手で追加しても、そのまま機能する様に、コードで動的な名前をつけるのをやってみたかったものです。 Sub test() Dim myRange As Range Dim i As Long Set myRange = Range(Cells(1, 1), Cells(1, ActiveSheet.Columns.Count).End(xlToLeft)) For i = 1 To myRange.Cells.Count ActiveWorkbook.Names.Add Name:=myRange.Cells(i).Value, RefersToR1C1:= _ "=OFFSET(" & ActiveSheet.Name & "!R1C" & i & ",1,0,COUNTA(" & ActiveSheet.Name & "!C" & i & ")-1,1)" Next i End Sub
お礼
ちょっとドバタバとしていて、返事がおくれてしまいすみません! 3回も答えて頂いて、本当にありがとうございます。 職場のエクセルは2007なのですが、教えていただいたとおりのマクロを登録すると 質問したとおり、名前を定義することができました! しかしそのデータを使って、入力規則でリストをしようとするとエラーが でてしまい。自分でもなんでかわからなくて、せっかくたくさん考えていただいたのに 申し訳ないです。 でも本当にありがとうございました!
- hige_082
- ベストアンサー率50% (379/747)
処理を行うシートを表示してから 実行してください Sub Macro1() Dim i For i = 1 To Cells(1, Columns.Count).End(xlToLeft).Column ActiveWorkbook.Names.Add Name:=Cells(1, i).Value, _ RefersTo:="=" & Range(Cells(1, i), Cells(Rows.Count, i).End(xlUp)).Address Next i End Sub 参考まで
補足
この質問のシステムの使い方がまだわからないので、「補足入力」の使い方間違っていたらごめんなさい>< 前回に引き続き、回答ありがとうございます! また教えていただいたマクロを登録し実行したところ 列と行の名前の定義はとてもうまくいったんですが、 一番上の行(銀行名の行)には名前を定義したくないときには マクロのどこを変えたらできますかね>< 一番上の行の値を名前の定義で2行目~n行目につけたいんです。 回答のマクロを登録して 「入力規則」で範囲に「=○○銀行」と設定したときに、支店だけじゃなく銀行名まで でてきてしまいました。 質問の仕方がうまくできなくて、理解しにくくてすみません。 もしよければ、また教えていただきたいです。 お願いします!
- mitarashi
- ベストアンサー率59% (574/965)
#1です。Sheet1でしか動かないコードになっておりましたので、修正しました。失礼いたしました。 Sub test() Dim myRange As Range Dim i As Long Set myRange = Range(Cells(1, 1), Cells(1, ActiveSheet.Columns.Count).End(xlToLeft)) For i = 1 To myRange.Cells.Count ActiveWorkbook.Names.Add Name:=myRange.Cells(i).Value, RefersToR1C1:= _ "=OFFSET(" & ActiveSheet.Name & "!R1C" & i & ",1,0,COUNTA(Sheet1!C" & i & ")-1,1)" Next i End Sub 'おまけで動作確認用です。 Sub test2() Dim myRange As Range Dim i As Long Set myRange = Range(Cells(1, 1), Cells(1, ActiveSheet.Columns.Count).End(xlToLeft)) For i = 1 To myRange.Cells.Count Application.Goto Reference:=myRange.Cells(i).Value MsgBox "次の範囲を選択" Next i End Sub
お礼
ありがとうございます!
- mitarashi
- ベストアンサー率59% (574/965)
こんなものでいかがでしょうか。ただし、xl2000用のコードですので、他バージョンで動かなかったらご容赦ください。(リスト用データの列内に他のデータが存在していない事を前提としております) Sub test() Dim myRange As Range Dim i As Long Set myRange = Range(Cells(1, 1), Cells(1, ActiveSheet.Columns.Count).End(xlToLeft)) For i = 1 To myRange.Cells.Count ActiveWorkbook.Names.Add Name:=myRange.Cells(i).Value, RefersToR1C1:= _ "=OFFSET(Sheet1!R1C" & i & ",1,0,COUNTA(Sheet1!C" & i & ")-1,1)" Next i End Sub
お礼
ありがとうございます!
お礼
お礼がおくれてしまい申し訳ありません>< 教えていただいたマクロをしようした所、 思ったとおりに動きました! 本当に助かりました! ありがとうございました!