[三流君] −−> [VBAで楽しく] −−> [バックナンバー一覧]
−−> No.013 Excel セルに名前を付けてみる

Excel セルに名前を付けてみる

メルマガ発行内容

<Excel セルに名前を付けてみる>

こんにちは、 昔のメルマガを参考に楽して発行中の三流プログラマーKen3です。 チョット退屈してきた人も居ると思うので、 今回は、 修正に強いプログラム作りの参考になれば と 思い、 Range(番地)の参照方法から、 Excelのセルに付けた名前を使用する処理を書きたいと思います。 いつものセリフで、そんなたいしたことじゃないので今回もご安心を。 /* * 1. Excel セルに名前を付けて使用する */ みなさんは、セルに名前を付けて、使用したことありますか? なに?それ? えっと、下記のような表を作りました。 A列 B列 1 単価 10 2 在庫数 200 3 在庫金額 2000 ここで、B3に入っている計算式は?どんな式でしょうか? 簡単に書くと、 =B1*B2 でしょ。 はい、正解です。 なめてんじゃねえょ。 まぁまぁ、そんなに興奮しないで、、 気を取り直して続けると、 在庫金額って、単価*在庫数ですよね、 なので、=B1*B2ですよね。 話を進めると、 Excelの機能でセルに名前を付ける機能があって、 メニューから挿入--名前--定義 を選択します。 名前に単価を入力、 参照範囲に$b$1を選択してOKを押します。 同様に メニューから挿入--名前--定義 名前に在庫数、参照範囲に$b$2を入れ、OKを押します。 これで、下記のような使用方法が可能です。 =単価*在庫数 をB3のセルに入力します。 おっ、なんとか出来たみたいですね。 だから?何?って感じだけど。 セルに名前を付けておくと便利でしょ? どこがぁ? /* * 2.VBAから値を参照、セットするには */ おっと、これは、VBA系のメルマガだったっけ。 VBAから値を参照、セットするには、 Rangeオブジェクトを使用します。 簡単に書くと、 Sub Macro1() Range("単価") = 20 End Sub みたいな使い方が可能となります。 Sub Macro1() Range("B1") = 20 End Sub より、わかり易いでしょ。 まぁ、何とも言えないよね。 う〜ん、コイツを説得するのには時間がかかりそうだなぁ、、、 手間かけて、あと2押しぐらいするか。 /* * 3.Excelのフォーマットに名前付きのセルを使用すると */ チョット前、MDBと同フォルダのExcelファイルを開く ( /vba/backno/vba007.html 参照) をやったよね。 たしか、 AccessからExcelファイルを開いて、データをセット セット位置は、 ID・・・・・・セルB4 Name・・・・・セルC4 Address ・・・セルB6 TEL ・・・・・セルD7 にセットする。 だったよね。 で、完成したAccessのサンプルのソースは、 Private Sub コマンド0_Click() On Error GoTo Err_コマンド0_Click Dim strXLSFILE As String 'Excelのファイル名格納場所 Dim oApp As Object 'Excelを操作するオブジェクト変数 Dim strMDBPATH As String Dim strWORK As String Dim i As Integer 'カウンター変数 'Accessの起動位置を取得 CurrentDb.NameにD:\xxxx\yyyy\zzz.mdbが入っている strWORK = CurrentDb.Name '後ろから1文字単位で¥を探す For i = Len(strWORK) To 1 Step -1 If Mid(strWORK, i, 1) = "\" Then Exit For '¥だったら抜ける Next i 'D:\xxxx\yyyy\zzz.mdb --> D:\xxxx\yyyy\ にする strMDBPATH = Mid(strWORK, 1, i) 'Excelの元ファイルの名前を作成 D:\xxxx\yyyy\ + TYPE.xls strXLSFILE = strMDBPATH & "TYPE.xls" 'ファイルの存在をチェックする If Dir(strXLSFILE) = "" Then MsgBox strXLSFILE & " を 確認して下さい" Exit Sub '途中で抜ける End If Set oApp = CreateObject("Excel.Application") oApp.Visible = True 'Only XL 97 supports UserControl Property oApp.UserControl = True '*1↓頭にCreateObjectで作成した変数を追加しただけ oApp.Workbooks.Open FileName:=strXLSFILE '^^^^ '*2 Range("A1").Value ="XXXX" でデータをセットする oApp.Range("B4").Value = Me![ID] oApp.Range("C4").Value = Me![Name] oApp.Range("B6").Value = Me![Address] oApp.Range("D7").Value = Me![TEL] Exit_コマンド0_Click: Exit Sub Err_コマンド0_Click: MsgBox Err.Description Resume Exit_コマンド0_Click End Sub と、なんかやってたよね、ぐちゃぐちゃと。 それで、今回のポイントなんだけど、 '*2 Range("A1").Value ="XXXX" でデータをセットする oApp.Range("B4").Value = Me![ID] oApp.Range("C4").Value = Me![Name] oApp.Range("B6").Value = Me![Address] oApp.Range("D7").Value = Me![TEL] とAccessのフォームから開いたExcelのセルにデータをセットしてるんだけど、 TYPE.xlsのセルに名前を付けて使用すると、 '*2 Range(セルに付けた名前).Value ="XXXX" でデータをセットする oApp.Range("ID").Value = Me![ID] oApp.Range("氏名").Value = Me![Name] oApp.Range("住所").Value = Me![Address] oApp.Range("電話番号").Value = Me![TEL] B4などのセル番地から、付けた名前で参照できます。 それが何か? 別にB4とかC4でいいんじゃない? 仕様書にB4にIDをセット、C4にNameをセット 明確に書いてあるんだからさ。 そうなんだけど、う〜ん、、、手ごわいなぁ。 よし次は、得意の架空の作り話だ。 /* * 4.将来、フォーマットを修正した時に効果が出る */ 一行目にタイトル行を追加したい と 客先から依頼が来ました。 そしたら、アナタの修正手順は?どんな感じですか? Excel TYPE.xlsを開いて、一行挿入して、タイトル入力後に上書き保存、 Access側のセット処理は、 oApp.Range("B4").Value = Me![ID] oApp.Range("C4").Value = Me![Name] oApp.Range("B6").Value = Me![Address] oApp.Range("D7").Value = Me![TEL] を oApp.Range("B5").Value = Me![ID] oApp.Range("C5").Value = Me![Name] oApp.Range("B7").Value = Me![Address] oApp.Range("D8").Value = Me![TEL] と セット位置を+1すれば修正完了でしょ。 チョロイ修正でしたね。 簡単に修正完了かぁ〜じゃなくって、 Excelでセルに名前を付けてると、 一行挿入しても、名前の位置は相対的に移動するので、 Access側の '*2 Range(セルに付けた名前).Value ="XXXX" でデータをセットする oApp.Range("ID").Value = Me![ID] oApp.Range("氏名").Value = Me![Name] oApp.Range("住所").Value = Me![Address] oApp.Range("電話番号").Value = Me![TEL] は、変更無しでそのままでOKなんですよ。(これホント!) 実行できるサンプル http://www.ken3.org/vba/lzh/vba013.lzh を落して、 行の追加や列の追加、 フォーマットを変更して、 遊んでみてください。 /* * 5.終わりの挨拶 */ 今日書いたことは、 ・Excelのセルに名前を付ける方法 ・Range("単価") = 20 でVBAから使用可能です ・応用すると、変更の少ないプログラム書けるよ でした。 拾い読みして、 1つでも何かの参考となれば幸いです。 いろいろな環境に対応できない不器用な、三流プログラマーKen3でした。

フィードバック

VBA系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.013を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

ページフッター(リンクや広告など)


[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます


広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列

情報を探す

情報を探すならGoogleかな?

↓Web全体、サポート情報(support.microsoft.com)や三流君VBA(ken3.org)から検索する
Google
Web www.ken3.org
www.microsoft.com support.microsoft.com

あとは、項目別にMSでお勉強かな?
◆ マイクロソフト サイトの歩き方
◇ How-To インデックス
◇ FAQ インデックス
◇ スキルレベル別おすすめコンテンツ
◇ テクノロジ マップ
◇ テーマ別技術資料一覧

書籍の購入

Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??

コンピュータ書籍の発送がハヤイ専門店

コンピュータの本・専門店
種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり

amazon.co.jpでキーワード別チェック

下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・