• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルのセルの長さが可変のデータに、それぞれ一番上のデータの名前を定)

エクセルのセルの長さが可変のデータに、一番上のデータの名前を定義する方法

このQ&Aのポイント
  • エクセルのセルの長さが可変のデータに、それぞれ一番上のデータの名前を定義する方法を教えてください。
  • エクセルのセルの長さが可変のデータに、一番上のデータの名前を定義する方法を教えてください。
  • エクセルのセルの長さが可変のデータに、それぞれ一番上のデータの名前を定義する方法を知りたいです。

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

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.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

emaplais
質問者

お礼

お礼がおくれてしまい申し訳ありません>< 教えていただいたマクロをしようした所、 思ったとおりに動きました! 本当に助かりました! ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

#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

emaplais
質問者

お礼

ちょっとドバタバとしていて、返事がおくれてしまいすみません! 3回も答えて頂いて、本当にありがとうございます。 職場のエクセルは2007なのですが、教えていただいたとおりのマクロを登録すると 質問したとおり、名前を定義することができました! しかしそのデータを使って、入力規則でリストをしようとするとエラーが でてしまい。自分でもなんでかわからなくて、せっかくたくさん考えていただいたのに 申し訳ないです。 でも本当にありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

処理を行うシートを表示してから 実行してください 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 参考まで

emaplais
質問者

補足

この質問のシステムの使い方がまだわからないので、「補足入力」の使い方間違っていたらごめんなさい>< 前回に引き続き、回答ありがとうございます! また教えていただいたマクロを登録し実行したところ 列と行の名前の定義はとてもうまくいったんですが、 一番上の行(銀行名の行)には名前を定義したくないときには マクロのどこを変えたらできますかね>< 一番上の行の値を名前の定義で2行目~n行目につけたいんです。 回答のマクロを登録して 「入力規則」で範囲に「=○○銀行」と設定したときに、支店だけじゃなく銀行名まで でてきてしまいました。 質問の仕方がうまくできなくて、理解しにくくてすみません。 もしよければ、また教えていただきたいです。 お願いします!

全文を見る
すると、全ての回答が全文表示されます。
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

#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

emaplais
質問者

お礼

ありがとうございます!

全文を見る
すると、全ての回答が全文表示されます。
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

こんなものでいかがでしょうか。ただし、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

emaplais
質問者

お礼

ありがとうございます!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルの 列のデータの内容が変わったら、次の列に表示できるようにした

    エクセルの 列のデータの内容が変わったら、次の列に表示できるようにしたい。 すみません、説明すると難しいのですが。 したいことの例を下にかいてみます。 例) ↓こんなデータがあります。 A列   B列 ○○銀行 ××支店 ○○銀行 △△支店 ○○銀行 □□支店 ▽▽銀行 ■■支店 ▽▽銀行 ●●支店 ↓こうしたい。 A列   B列   ○○銀行 ▽▽銀行 ××支店 ■■支店 △△支店 ●●支店 □□支店 ※ 本当のデータは1000件以上あります。 いろいろインターネットでも調べてみましたが、わからなく。 もしいい案がある方は教えていただきたいんです。 できれば、関数で出来たらいいと思うんですが、 マクロしかできないのであれば、マクロでどうしたらいいのかも教えていただきたいんです。 マクロも人のを真似して使用できる程度の力しかありません。 でも本当に困っています。 すみませんが、よろしくお願いします。

  • エクセルの 列のデータの内容が変わったら、次の列に表示できるようにした

    エクセルの 列のデータの内容が変わったら、次の列に表示できるようにした エクセルの 列のデータの内容が変わったら、次の列に表示できるようにしたい。 すみません、説明すると難しいのですが。 したいことの例を下にかいてみます。 例) ↓こんなデータがあります。 A列   B列 ○○銀行 ××支店 ○○銀行 △△支店 ○○銀行 □□支店 ▽▽銀行 ■■支店 ▽▽銀行 ●●支店 ↓こうしたい。 A列   B列   ○○銀行 ▽▽銀行 ××支店 ■■支店 △△支店 ●●支店 □□支店 ※ 本当のデータは1000件以上あります。 いろいろインターネットでも調べてみましたが、わからなく。 もしいい案がある方は教えていただきたいんです。 できれば、関数で出来たらいいと思うんですが、 マクロしかできないのであれば、マクロでどうしたらいいのかも教えていただきたいんです。 マクロも人のを真似して使用できる程度の力しかありません。 でも本当に困っています。 すみませんが、よろしくお願いします。

  • セルの値を参照して名前を定義する方法

    A列  B列 a    ああああ b   いいいい b   うううう b   ええええ c   おおおお c   かかかか d   きききき d   くくくく d   けけけけ d   ここここ d   ささささ このような配列でデータが存在します。 A列の文字を名前にしてB列に名前を定義しようとしています。 例えばああああという文字列にaという名前を定義したいのです。 いいいい、うううう、ええええにはbという名前を定義したいのです。 A列の同じデータの数が決まっていないので Dim cnt As Long 'A列の同じ値の数 Dim tName As String 'A列の値 cnt = WorksheetFunction.CountIf(ActiveSheet.Range("A1:B500"), tName) という関数を探してきたので、これでA列の同じ値のセルの数を取得しようと思います。 名前の定義はマクロを記録したところ・・・ ActiveWorkbook.Names.Add Name:="a", RefersToR1C1:="=Sheet1!R2C2:R2C2" を得ました。 この後どのようにしてプログラムを組み立てたらいいでしょうか。 よろしくお願いします。

  • 可視セルの重複データを除いたデータをカウントする方法

    可視セルの重複データを除いたデータをカウントする方法 Excel2003を使用しています。 A列~N列までオートフィルタを設定しています。 K列である特定の文字が入力されているセルを抽出しているときに表示されているC列のデータのうち、重複するデータを除いた個数を求めたいのですが、どうしたらよいでしょうか? 上記の状態で、C列のプルダウンに表示されているリストのデータ数が求めたい個数と同じになりますが、プルダウンに表示されているリストのデータ数をカウントする方法などあるのでしょうか? よろしくお願いします。

  • エクセルにおけるセルへの名前のつけ方につきまして

    同一ブックの別シートで、それぞれのシートのセルに同じ名前をつけることはできないのでしょうか?マクロなどを使用せずにエクセル表左上の「名前ボックス」で定義したいのですが。

  • Excel セルの名前を検索できますか?

    セルに名前を定義しています。そのセルに書かれた値を取得したいです。その方法として、セルの名前を検索することでセルを特定し、値を取得するマクロを作成したら、できるのでは?と考えたのですが、ヘルプやWebを調べてもこのような方法はありませんでした。こういったことはできないのでしょうか? 私の知識レベルは、C言語はひととおりできる、VBの経験はなし、業務でExcelを使っており基本操作はできるレベルです。 すみませんが、アドバイス、よろしくお願いいたします。 以下やりたいことの補足 具体的には、仕様書の仕様数がかかれたセルがあり、そのセルは”仕様数”として名前を定義している。そのセルの値である仕様数をマクロやVBAなどにより自動集計して、仕様書のボリュームを読みたいと考えています。

  • 【エクセル】抽出データを上に詰めて表示させたい。

    重複するデータを上に詰めて表示さセル方法が解らないです。 B列はA列の元データから重複分は表示しないようにしています。 C列はA列の元データから重複分の数を数えています。 │A │B    │C│ D │ 1│あああ │あああ │3│ 2│いいい │いいい │2│ 3│あああ │     │ │ 4│ええ  │ ええ  │2│ 5│おおお │おおお │1│ 6│ええ  │   │ │ 7│いいい │  │ │ 8│あああ │  │ │ 9│うううう│うううう│1│ ・ ・ 上記のような表で、A列が元データで、 B列にはセルB1から、=IF(COUNTIF($A$1:A1,A1)>1,"",A1)という関数を オートフィルで下まで伸ばしています。 C列は、=IF(COUNTIF($A$1:A1,A1)>1,"",COUNTIF($A$1:$A$100,A1))と いう関数を使用しています。 そこで、B列C列の何も表示されていないセルを詰めて、上に詰めて 表示させたいです。マクロは良くわからないのでなるべく関数で お願いします。ちなみに、今使用している関数も、こうしたほうが いいというのがありましたら。訂正してもらえると助かります。 解りづらいところがありましたら、補足します。 宜しくお願いします。

  • Excel 2003 プルダウンでセル色変え

    Excel2003で、8種類の条件により列の色変え処理をしたいのです。 A列は、入力規則のドロップダウン リストにより入力します。 A列に入力されたことにより、B列からF列まで別シートからVLOOKUP関数によりデータが入ります。 B列は、1~8の数値データです。 B列の1~8の数値データにより、A列~F列まてのセルを色変えしたいと考えてます。 マクロとしては、どのように記述したら良いでしょか? ご教授ください。

  • エクセルで名前の定義を自動化したい

    いつもお世話になっております。 添付のようにエクセルシートのA列に社名を入力したら、社名を名前にして行方向に「名前の定義」の範囲をD列からR列まで設定するようにしたいのですが。 これまでは私が都度やっていたのですがここでいろいろ教えてもらっているうちにだんだん欲が出てきた次第です。 目的は別シートの入力セルへの入力作業をこのシートに入力することでリストからの選択にしたいのです。 NETで調べてみたら数行のマクロで出来そうなのですがその数行が悲しいかな出来ないのでHELPです。

  • Excelの印刷範囲を可変にしたい

    Sheet1にデータの一覧表を作成、Sheet2に様式を作成して、Sheet1のデータをセル参照で表示させるようにしました。 このSheet2がSheet1のデータ件数によって印刷範囲が毎回変わるので、名前の定義でPrint_Areaを =OFFSET($A$1,0,0,COUNTA($A:$A),20) としましたが、思うようにいきませんでした。Sheet2のA列に空白セルが一定間隔であるのが原因かとおもったのですが、それにしても値のあるセルの数と表示される行が一致しなくて、何が問題なのかわからなくなりました。 上記設定の問題点と解決方法を教えていただきたいと思います。もし、全く他の方法があればそれでも構いません。初心者で独学勉強中ですが、簡易なものであればマクロも理解できるかと思います。よろしくお願いします。 【Sheet2の様式】   A    B    C    D     E   …  T 1 番号  名前   〒    県名  日程1 …  確認 2(空白) フリガナ 住所  (結合) 日程2 … (空白) 3(空白)(空白)  電話番号(空白) 日程3 … (空白) 上記3行が1件分で、以下の行へ繰り返します。使用の度に件数が変動します。

専門家に質問してみよう