• 締切済み

EXCEL・VBAで、範囲名を参照したい。

またまたお世話になります。 タイトルの通りなのですが、EXCELで作成している出勤表(sheet毎に月別にし、縦軸に社員名、横軸に日付を入れてあります。社員名は同一のブックの別シートにまとめてあり、参照で各月に表示してあります。)で、出勤した日に”1”を入れるのですが、今は手で月ごと、社員名毎に範囲名を作成し、一ヶ月分をまとめて入力しています。 今はまだ40名程なので、月が変わった時に範囲名を手で付け替えているのですが、人数が増えてきたり、入力担当者が変わったりした時に、この方法は大変になってくると思います。 そこで、現在の範囲名登録状況を確認し、(配列で良いと思います。)社員名と照合し、選択シートに自動的に割り振るように出来たら良いと思い、挑戦しているのですが、『現在の範囲名登録状況を確認』するところが、検索しても中々出てこなくて困っております。 予め、何という『範囲名』が登録されているか分からない、それを取得したい、といった場合、そういうことは可能なのか、範囲名を付け替えるには、DIMにREDIMがあるように一つのコマンドで可能なのか、それとも、削除→シート変更→作成を繰り返さなければ不可能なのか、また、方法は在るのか等知りたいです。よろしくお願い致します。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

質問を全く誤解していたらすみません。 質問者の(仕事関連)業務(人事・勤怠)で、名前定義を使っているらしいが、このアイデアは一般的でないと思うので、少し具体的に質問で例をあげて説明してもらわないと、読者にわからない。質問者は、自分の聞いていることだけに答えろと、なりがちだが、そのやりかたがベターかどうか、読者には納得できない。他社か自社のシステムの経験者がそういう方法を選んだのか。 それにインプットの質問らしいが、インプットに使う原書(出勤状況記録書類)はどんなものか書いてないのは片手落ちだろう。 ステップを踏んで文章化してみてください。 年月を指定すると、特定(年月別?)のシートが開き、その社員の出勤状況コード1を入れるセルは、どうして探しているのか?目視で探すのか?普通は簡単な方の社員コードを入れたりするが、(社員数が多くてコードが多くて覚えきれない場合は読み仮名先頭を入れて、該当の氏名を見て人間が選択するとかするように思うが? こういうのはVBAを使うとか、Access程度のデータベースを使うなどが必要になるように思うが、そういうのは使ってないのか? 私なら (1)その業務を選択。その入力(基準)年月を入力 (2)シートを割り出し、そのシートをSELECT (3)(A)シートの列の氏名から探す    (B)かな市名先頭1,2文字指定==>候補社員をィストに出すーー>選択    当該社員の行と列をシステムが探してSELECT  (4)入力 ドロップダウンからもできるが、1択しかないなら手入力    次月の表はシート追加と数式、見出しなどコピーして作ればよい

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

こんにちは どうされたいのか良く分からないのですが、イミディエイトウィンドウに列挙すると、 Sub test()   Dim v As Variant   For Each v In ThisWorkbook.Names     Debug.Print "名前:" & v.Name & " :範囲: " & v.RefersTo   Next End Sub どうなりますか?

kichi4182
質問者

補足

ありがとうございます。遅くなってしまい申し訳ございません。 上記を試したところ、 『 名前:_xlfn.COUNTIFS :範囲: =#NAME? 名前:_xlfn.DAYS :範囲: =#NAME? 』 と出た後、 『 名前:社員名1 :範囲: ='10月'!$F$4:$AJ$4 名前:社員名2 :範囲: ='10月'!$F$5:$AJ$5 』(社員名1、社員名2は実名です。) が人数分出ます。 この社員名の部分を”作業用”シートにある≪社員名≫と比較し、存在していれば、”!$F$4:$AJ$4”の部分は変えずにシート名だけを変更し、”作業用”シート上の≪社員名≫が範囲名に存在しなければ、その不足分を追加し、適切に範囲設定をしたいと思います。 この際、月を指定しシートを選択するのではなく、シートを選択した時点で何月が選択されたのかを判断し、自動的に範囲設定が出来ればと思います。 よろしくお願い致します。

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

こんにちは 範囲名は一定にして、範囲参照数式で、月や社員名で参照先と範囲が 変更されるようにした方がいいのでは? INDIRECT、COUNTA、MATCH、INDEX 等を駆使して範囲参照数式を 作り上げる感じです。

kichi4182
質問者

補足

ありがとうございます。 書き忘れていたのですが、範囲名は社員名とイコールにしてあります。あと、年度毎に別ブックにしてあるので、年度途中で社員が増えることはあっても、減らすことは参照がおかしくなるのでありません。 この場合においても可能ですよね? 例  1月シート選択時 範囲名A 1月.C4:C35 範囲名B 1月.D4:D35 範囲名C 1月.E4:E35  2月シート選択時 範囲名A 2月.C4:C35 範囲名B 2月.D4:D35 範囲名C 2月.E4:E35

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

関連するQ&A

  • Excel VBA で異なるシートの名前の範囲の参照方法について教えて

    Excel VBA で異なるシートの名前の範囲の参照方法について教えてください。 Sheet1には、入力規則で項目1と項目2をSheet2にある表からINDIRECT関数を使用して項目1のて、名前の範囲から、項目2が選択できるようになっています。 そのSheet2は非表示にしてあり、worksheets(2)など2枚目にあるとは限りません。シート名も決まったものではありません。その条件下で項目2がきちんと項目1の名前の中から選ばれているか確認したいのです。(項目2を選択してから、再度項目1を再度選択しなおすことが出来てしまうため。) 項目1と項目2の整合性を確かめるため、find関数を使用しようと考えていますが、これだとシート名を指定しなければなりません。名前の範囲からシート名を割り出す方法など何か良い手はないでしょうか。 それとセルに入力されたシート名を再表示するやり方が上手くいきません。どうしてなのでしょうか。↓ sub シート再表示() dim sagyo as integer '←シート名「632」などの数値な為 set WBK2=Activeworkbook sagyo=WBK2.worksheets(1).range("f5").value On error goto jamp3 worksheet("sagyo").visible=true  処理 sagyoが無かった場合、range("f6").valueの数値が入力されている(677など)を表示させたい jamp3: end sub jamp3: お手数ですがよろしくお願い致します。

  • エクセルVBAでのスケジュール作成

    いつも大変お世話になっております。 本日も質問させてください。 会社指定の異なる2つのブックのエクセル表に自分の部署の社員全員のスケジュールを入れなければいけません。 (1つは月間、もう1つは週間で、それぞれ各月、各週毎にシートがあります。) VBAのフォームを作成し、週間スケジュールは自動でセットできるようになりました。 ですが、月間のスケジュールがうまくいかなくて困っています。 (入力フォームは共通のものを使用します。) スケジュールの表はシートが月別になっていてA列に社員名、1行目に日付、2行目に曜日、3行目に祝日が表示されるようになっています。 4行目からが各社員のスケジュールですが、1人の1日分のスケジュール入力のセルは2列×3行=6セルです。 (わかりにくいので図で表現したかったのですが、ずれて表示されてしまって余計にわかりにくいのでやめてみました。ちなみに、1人目の1日目のスケジュールのセル範囲はB4:C6となります。) そして、各セルには入力する項目が決まっています。 (この項目についてはフォームで作成済みです。) セルが多いため、Rangeを使おうと思っても指定するのが困難です。 個人的にはRangeのセルの値を別シートに作成した表からindexで検索できたらなぁ。と思っています。 できるかどうかすらわかっていませんが。(汗) もちろん、もっと効率的な方法があればそちらを教えていただきたいです。 週間スケジュールのセルから入力値をもってくる事も考えたのですが、月間は1日から必ず始まっていますが、週間は月曜日からのため、月や週によって日付が異なることなどから、やはり私には難しいのです。 よろしくお願いします。

  • EXCEL2010 VBA 指定した数だけシートを

    EXCEL2010でVBAを使用して指定した数だけワークシートを作成したいと思います。 シートA11に入力してある数を確認してその数だけシートを作成します。 作成したシート名は○1・○2という風に文字に数を増やしていきます。 指定した数だけシートを作成したらもう一度この処理を行います。 ただしシート名は×1・×2~という風に違う名前で作ります。 (例) A11の値は5 シート ○1・○2・○3・○4・○5 と シート ×1・×2・×3・×4・×5 の計10個のシートを作成する。 ○と×のシートを指定数だけ作成する。 説明が下手で分かりにくいかもしれませんが上記の方法を教えてください。よろしくお願いします。

  • VLOOKUP関数:別シートにある参照範囲が変動する場合

    スポーツクラブで学童会員の名簿を作成しています。 【目的】 VLOOKUP関数を利用して、シート1「名簿」のA列に会員番号を 手入力すると B列に学年、C列に氏名が各々自動入力されるようにしたい。 【設定】 ・シート1を「名簿」とし、  A列を会員番号、B列を学年、C列とD列を結合して氏名としました。 ・シート2を「参照データ」とし、  A列を会員番号、B列を学年、C列とD列(結合を解除)を氏名と  しました。 ・シート2の1行目はタイトル行とし、データが入力されているのは  2行目からです。 ・別シートのデータを参照するため、シート2のデータが入力されて  いる範囲に「参照範囲1」という範囲名をつけました。 【状況】 現在設定している数式は B2=VLOOKUP(A2,参照範囲1,2,FALSE) なのですが、以下の場合は「参照範囲1」で設定した範囲とは 異なる範囲のデータを参照しなければなりません。 ・入会者がいる場合:データを追加するため、行が増える ・退会者がいる場合:データを削除しブランクを解消するため、  行が減る 【質問】 上記状況の場合、VLOOKUP関数に加えてどのような関数を使用すれば 別シートにある参照範囲の変動に対応できるのでしょうか? 会員が増減するたびに、新たに参照範囲を設定し範囲名をつけ直す という作業は避けたいのですが・・・ ご教示いただけますよう、何卒宜しくお願い申し上げます。

  • エクセル シート名を参照する関数は?

    エクセルで、売上を管理しているファイルがあります。 4~3月までの各月ごとのシートに、取引先ごとの売上額・仕入額・原価率・担当者名etcが1行ずつ入力されてあります。 そして、担当者別シートで担当者ごとの取引先データをLOOKUP関数やINDEX関数を使って抽出・合計し、グラフ化して管理しています。 ↓こんな状態です。(合計額の表)    A   B  C  D  E F G 4月 50000 40000 80% ・・・・・ 5月 6月 今の状態では、5月になればA~Gまでの4月の列をコピペして LOOOKUP関数等で参照しているシート名「4月」を「5月」にひとつずつ入力しなおしています。 これが結構面倒なので、 セルに「5月」と入力したら、5月のシートを参照しにいく、 セルに「6月」と入力したら、6月のシートを参照しにいく・・・ というように作り直したいのですが、 このような、シート名を参照する関数はあるのでしょうか?

  • エクセルでシート名をセルに反映させる方法

    エクセルでシート名をセルに反映させる方法 いつも、ここでいろいろ助けられています。 セルにシート名を入れる方法はございますでしょうか。 どういうことかと言うと、同じフォームの表を、月別に作成していますので、毎回、その月の月度をシート内の月度を入力する位置および、シート名の欄に2回入力しています。 これを1回にしたく質問させていただきました。 エクセルのバージョンは「エクセル2007」です どなたかご存知の方よろしくお願いいたします。

  • エクセルのVBAについて

    ご教授下さい。 勤怠管理表を作成しています。 個人データを入力するシートがあり、出来上がったものの中から必要な事項のみを別シートの一覧表へ転記をしたいのですが、方法がわかりません。 どなたかご教授ください。 1.転記したい事項は下記の通りです。 (1)氏名 (2)出勤 (3)公休 (4)休み (5)合計 (6)給料 2.6項目をシート名(全体)に表形式で転記 3.社員番号等はなくランダムに入力するため、一覧表へは転記のみされればOKです。 よろしくお願いします。

  • エクセルvbaセル範囲について

    困っております。 ご教授ください。 エクセルシート上に1~10の数字が列方向に並んでいます。 ユーザーフォームでtextbox1とtextbox2を作成します。 textbox1とtextbox2は1~10の間で範囲を入力します。 textbox2でエンターを押されたときに処理が開始します。 例えばtextbox1に「3」、textbox2に「8」が入力された場合、 3,4,5,6,7,8のセル範囲を選択したいのですがどのようにすればよろしいでしょうか。 よろしくお願いします。

  • 【EXCEL】 結合されたセルを参照した式

    1.EXCELで、数式で計算する時に元になるデータ(Sheet1のセル)に結合されたセルを指定しています。 2.Sheet2に上記の結合セルを参照した数式を作成しようと考えています。  a.セルに = (イコール)を入力し  b.Sheet2の目標セル(B1:C1)をクリック  c.Enterキーを押すと  入力された数式が  ='Sheet1'!B1:C1  となってしまい、エラー(#VALUE!)になってしまいます。  入力後に数式を手で修正して   ='Sheet1'!B1  とすれば正常に値が表示されますが、他のシートはこんな修正をしなくても   ='SheetXX'!B1  のように表示されます。 どこを修正(確認)したらいいのかわからない状態です。 どなたかご存知の方がおりましたらよろしくお願いいたします。

  • EXCEL2010で、アクティブセルが特定の範囲に

    EXCEL2010で、アクティブセルが特定の範囲に在る時だけ、アクティブシート上のコマンドボタンを有効にし、範囲外に在る時は無効にしたいのですが、どうもうまくいきません。 表示・非表示ではなく有効・無効で対応したいです。 アクティブシート名が"予約状況"、コマンドボタン名が、”日報作成"です。 VBAの基本が解かっていないだけかもしれませんが、 CommandButton1.Enabled = False '無効 だと、実行時エラー424 オブジェクトが必要です。と出て、 Sheets("予約状況").Select ActiveSheet.Unprotect ActiveSheet.Shapes.Range(Array("日報作成")).Select ActiveSheet.Shapes.Range(Array("日報作成")).Enabled = False だと、最後の行で、実行時エラー438 オブジェクトはこのプロパティまたはメソッドをサポートしていません  と出てしまいます。 プロパティとは「属性」に近い意味だと理解していますが、合っていますでしょうか。(書き込み禁止や文字色や画面上の位置等) またオブジェクトとは、言ってしまえば「目に見える物自体」だと、理解しています。(ワークシートやコマンドボタン、セル等) メソッドは、「命令・指令」で良いのでしょうか。よく解かりません。この辺りもご教示戴けると大変有り難いです。よろしくお願いします。

専門家に質問してみよう