<固定値や基準値はConst宣言を使用して変更し易くする>
こんにちは、三流プログラマーのKen3です。 今回は、 Const宣言、固定値の宣言はどんな時使うと効果あるか? について、軽く書いてみたいと思います。/* * 1. 今回のキッカケ */
読者よりメルマガの返信メールで、 Constぐらい使ったら? とメールをいただいたので、ネタにして書いてみたいと思います。 ※ホントは、もっと激しい文体でクレームをもらったんだけど/* * 2.例題の概要説明 */
No.130 Access クエリーをExcelシートへ10行x3列で出力する http://www.ken3.org/backno/backno_vba27.html#130 クエリーで集計した結果をExcelのシートへ出力してみました。 出力時、10行x3列を1ブロックとして、出力してみました。 No.138 AccessからExcel出力、色・列幅・行の高さを調整する http://www.ken3.org/backno/backno_vba28.html#138 色や列幅、高さを変える方法を上記で探りました、 クエリーを10行x3列で出力して、 列幅・行の高さを変更してました。
Private Sub btnMakeExcel_Click() Dim rs As New ADODB.Recordset 'ADOのレコードセット Dim objEXCEL As Object 'Excel参照用 Dim nYLINE As Integer '行セット位置 Dim nXLINE As Integer '列セット位置 Dim nRCNT As Integer 'レコードカウンタ Dim strWORK As String 'ワーク変数 'Excelを起動する、オブジェクトの作成 Set objEXCEL = CreateObject("Excel.Application") 'オブジェクトの作成 objEXCEL.Visible = True 'Excelを見えるようにする '新規のブックを追加する objEXCEL.Workbooks.Add 'Excelのブックを作成 'Excelのシートを追加、シート名を変更する objEXCEL.Sheets.Add 'シートを追加する objEXCEL.ActiveSheet.Name = "DATA" 'シート名をDATAにする '列幅は、縦なので、ここ、頭で定義する For nXLINE = 1 To 9 Step 3 objEXCEL.Columns(nXLINE).ColumnWidth = 8.5 objEXCEL.Columns(nXLINE + 1).ColumnWidth = 8.5 objEXCEL.Columns(nXLINE + 2).ColumnWidth = 1.8 Next nXLINE 'レコードセットを開く(Q_YUBIN_5) rs.Open "Q_YUBIN5", CurrentProject.Connection, _ adOpenKeyset, adLockOptimistic 'カウンタの初期化 スタート位置のセット nYLINE = 1 '1行目だよ nXLINE = 1 '1列目(A列)だよ '見出しをセットする objEXCEL.Cells(nYLINE, nXLINE) = "郵便番号" objEXCEL.Cells(nYLINE, nXLINE + 1) = "件数" '罫線を引く(見出しの位置から+10行分) Call make_Border(objEXCEL.Range(objEXCEL.Cells(nYLINE, nXLINE), _ objEXCEL.Cells(nYLINE + 10, nXLINE + 1))) '行の高さを調整する objEXCEL.Rows(nYLINE).RowHeight = 25 '見出しの高さを25へ strWORK = Trim(nYLINE + 1) & ":" & Trim(nYLINE + 10) '10行分の範囲文字列 objEXCEL.Rows(strWORK).RowHeight = 16 'データ高さを16へ nYLINE = nYLINE + 1 '見出し分行数が増えます nRCNT = 1 '見出し表示後は1レコード目だよ 'レコードセットからExcelへデータをセットする 'ループ処理 While rs.EOF = False 'いつものEOFが偽の間 'データをセットする(Accessから転記) objEXCEL.Cells(nYLINE, nXLINE) = rs("変換後郵便番号").Value objEXCEL.Cells(nYLINE, nXLINE + 1) = rs("変換後郵便番号のカウント").Value 'セルの色を変える objEXCEL.Cells(nYLINE, nXLINE).Interior.ColorIndex = 33 'スカイブルー objEXCEL.Cells(nYLINE, nXLINE + 1).Interior.ColorIndex = 33 '次を読む And カウンタを移動する rs.MoveNext '次のレコードに移動しないと、とんでもないことに(笑) nRCNT = nRCNT + 1 '処理レコード数を増やす If nRCNT > 10 Then '処理したレコードが10を越えた(次の列) nXLINE = nXLINE + 3 '次の列へカウンタを移動 If nXLINE > 9 Then '列が越えた? nXLINE = 1 '1列目(A列)に戻す nYLINE = nYLINE + 2 '空白行にしたいのでセット位置を+2する Else nYLINE = nYLINE - 10 '列が変わったので行カウンタをマイナスする End If '見出しの表示 objEXCEL.Cells(nYLINE, nXLINE) = "郵便番号" objEXCEL.Cells(nYLINE, nXLINE + 1) = "件数" '罫線を引く(見出しの位置から+10行分) Call make_Border(objEXCEL.Range(objEXCEL.Cells(nYLINE, nXLINE), _ objEXCEL.Cells(nYLINE + 10, nXLINE + 1))) '行の高さを調整する objEXCEL.Rows(nYLINE).RowHeight = 25 '見出しの高さを25へ strWORK = Trim(nYLINE + 1) & ":" & Trim(nYLINE + 10) '範囲文字列を作成 objEXCEL.Rows(strWORK).RowHeight = 16 'データ高さを16へ nYLINE = nYLINE + 1 '見出し表示分行数が増えます nRCNT = 1 '見出し表示後は1レコード目だよ Else ' nYLINE = nYLINE + 1 '次の行へセット位置を移動 End If Wend '通常は、ここでExcelを保存するんだけど、今回は開きっぱなしの手抜き rs.Close '開いたら閉じろ、ドアを開けたら閉めるってしつけられたでしょ(笑) Set rs = Nothing '変数も後始末しますか。使った器はキレイにしろって? End Sub |
Private Sub btnMakeExcel_Click() '定数 '列の幅を定義 Const 列幅_郵便番号 = 9.5 Const 列幅_件数 = 8.5 Const 列幅_空白 = 1.75 '行の高さを定義 Const 高さ_見出し = 26 Const 高さ_データ = 14 Dim rs As New ADODB.Recordset 'ADOのレコードセット Dim objEXCEL As Object 'Excel参照用 Dim nYLINE As Integer '行セット位置 Dim nXLINE As Integer '列セット位置 Dim nRCNT As Integer 'レコードカウンタ Dim strWORK As String 'ワーク変数 'Excelを起動する、オブジェクトの作成 Set objEXCEL = CreateObject("Excel.Application") 'オブジェクトの作成 objEXCEL.Visible = True 'Excelを見えるようにする '新規のブックを追加する objEXCEL.Workbooks.Add 'Excelのブックを作成 'Excelのシートを追加、シート名を変更する objEXCEL.Sheets.Add 'シートを追加する objEXCEL.ActiveSheet.Name = "DATA" 'シート名をDATAにする '列幅は、縦なので、ここ、頭で定義する For nXLINE = 1 To 9 Step 3 objEXCEL.Columns(nXLINE).ColumnWidth = 列幅_郵便番号 objEXCEL.Columns(nXLINE + 1).ColumnWidth = 列幅_件数 objEXCEL.Columns(nXLINE + 2).ColumnWidth = 列幅_空白 Next nXLINE 'レコードセットを開く(Q_YUBIN_5) rs.Open "Q_YUBIN5", CurrentProject.Connection, _ adOpenKeyset, adLockOptimistic 'カウンタの初期化 スタート位置のセット nYLINE = 1 '1行目だよ nXLINE = 1 '1列目(A列)だよ '見出しをセットする objEXCEL.Cells(nYLINE, nXLINE) = "郵便番号" objEXCEL.Cells(nYLINE, nXLINE + 1) = "件数" '罫線を引く(見出しの位置から+10行分) Call make_Border(objEXCEL.Range(objEXCEL.Cells(nYLINE, nXLINE), _ objEXCEL.Cells(nYLINE + 10, nXLINE + 1))) '行の高さを調整する objEXCEL.Rows(nYLINE).RowHeight = 高さ_見出し '見出しの高さを設定 strWORK = Trim(nYLINE + 1) & ":" & Trim(nYLINE + 10) '10行分範囲文字列を作成 objEXCEL.Rows(strWORK).RowHeight = 高さ_データ 'データ高さを設定 nYLINE = nYLINE + 1 '見出し分行数が増えます nRCNT = 1 '見出し表示後は1レコード目だよ 'レコードセットからExcelへデータをセットする 'ループ処理 While rs.EOF = False 'いつものEOFが偽の間 'データをセットする(Accessから転記) objEXCEL.Cells(nYLINE, nXLINE) = rs("変換後郵便番号").Value objEXCEL.Cells(nYLINE, nXLINE + 1) = rs("変換後郵便番号のカウント").Value 'セルの色を変える objEXCEL.Cells(nYLINE, nXLINE).Interior.ColorIndex = 33 'スカイブルーをセット objEXCEL.Cells(nYLINE, nXLINE + 1).Interior.ColorIndex = 33 '次を読む And カウンタを移動する rs.MoveNext '次のレコードに移動しないと、とんでもないことに(笑) nRCNT = nRCNT + 1 '処理レコード数を増やす If nRCNT > 10 Then '処理したレコードが10を越えた(次の列) nXLINE = nXLINE + 3 '次の列へカウンタを移動 If nXLINE > 9 Then '列が越えた? nXLINE = 1 '1列目(A列)に戻す nYLINE = nYLINE + 2 '空白行にしたいのでセット位置を+2する Else nYLINE = nYLINE - 10 '列が変わったので行カウンタをマイナスする End If '見出しの表示 objEXCEL.Cells(nYLINE, nXLINE) = "郵便番号" objEXCEL.Cells(nYLINE, nXLINE + 1) = "件数" '罫線を引く(見出しの位置から+10行分) Call make_Border(objEXCEL.Range(objEXCEL.Cells(nYLINE, nXLINE), _ objEXCEL.Cells(nYLINE + 10, nXLINE + 1))) '行の高さを調整する objEXCEL.Rows(nYLINE).RowHeight = 高さ_見出し '見出しの高さを設定 strWORK = Trim(nYLINE + 1) & ":" & Trim(nYLINE + 10) '10行分範囲文字列を作成 objEXCEL.Rows(strWORK).RowHeight = 高さ_データ 'データ高さを設定 nYLINE = nYLINE + 1 '見出し表示分行数が増えます nRCNT = 1 '見出し表示後は1レコード目だよ Else ' nYLINE = nYLINE + 1 '次の行へセット位置を移動 End If Wend '通常は、ここでExcelを保存するんだけど、今回は開きっぱなしの手抜き rs.Close '開いたら閉じろ、ドアを開けたら閉めるってしつけられたでしょ(笑) Set rs = Nothing '変数も後始末しますか。使った器はキレイにしろって? End Sub |
Private Sub btnMakeExcel_Click() '定数 '列の幅を定義 Const 列幅_郵便番号 = 9.5 Const 列幅_件数 = 8.5 Const 列幅_空白 = 1.75 '行の高さを定義 Const 高さ_見出し = 26 Const 高さ_データ = 14 '行、列の基準値を設定する Const MAX_行 = 6 'で次の列へ Const MAX_列 = 4 'で次の段落へ Dim rs As New ADODB.Recordset 'ADOのレコードセット Dim objEXCEL As Object 'Excel参照用 Dim nYLINE As Integer '行セット位置 Dim nXLINE As Integer '列セット位置 Dim nRCNT As Integer 'レコードカウンタ Dim strWORK As String 'ワーク変数 'Excelを起動する、オブジェクトの作成 Set objEXCEL = CreateObject("Excel.Application") 'オブジェクトの作成 objEXCEL.Visible = True 'Excelを見えるようにする '新規のブックを追加する objEXCEL.Workbooks.Add 'Excelのブックを作成 'Excelのシートを追加、シート名を変更する objEXCEL.Sheets.Add 'シートを追加する objEXCEL.ActiveSheet.Name = "DATA" 'シート名をDATAにする '列幅は、縦なので、ここ、頭で定義する For nXLINE = 1 To (MAX_列 * 3) Step 3 objEXCEL.Columns(nXLINE).ColumnWidth = 列幅_郵便番号 objEXCEL.Columns(nXLINE + 1).ColumnWidth = 列幅_件数 objEXCEL.Columns(nXLINE + 2).ColumnWidth = 列幅_空白 Next nXLINE 'レコードセットを開く(Q_YUBIN_5) rs.Open "Q_YUBIN5", CurrentProject.Connection, _ adOpenKeyset, adLockOptimistic 'カウンタの初期化 スタート位置のセット nYLINE = 1 '1行目だよ nXLINE = 1 '1列目(A列)だよ '見出しをセットする objEXCEL.Cells(nYLINE, nXLINE) = "郵便番号" objEXCEL.Cells(nYLINE, nXLINE + 1) = "件数" '罫線を引く(見出しの位置から+MAX_行行分) Call make_Border(objEXCEL.Range(objEXCEL.Cells(nYLINE, nXLINE), _ objEXCEL.Cells(nYLINE + MAX_行, nXLINE + 1))) '行の高さを調整する objEXCEL.Rows(nYLINE).RowHeight = 高さ_見出し '見出しの高さを設定 strWORK = Trim(nYLINE + 1) & ":" & Trim(nYLINE + MAX_行) 'MAX_行範囲文字列を作成 objEXCEL.Rows(strWORK).RowHeight = 高さ_データ 'データ高さを設定 nYLINE = nYLINE + 1 '見出し分行数が増えます nRCNT = 1 '見出し表示後は1レコード目だよ 'レコードセットからExcelへデータをセットする 'ループ処理 While rs.EOF = False 'いつものEOFが偽の間 'データをセットする(Accessから転記) objEXCEL.Cells(nYLINE, nXLINE) = rs("変換後郵便番号").Value objEXCEL.Cells(nYLINE, nXLINE + 1) = rs("変換後郵便番号のカウント").Value 'セルの色を変える objEXCEL.Cells(nYLINE, nXLINE).Interior.ColorIndex = 33 'スカイブルーをセット objEXCEL.Cells(nYLINE, nXLINE + 1).Interior.ColorIndex = 33 '次を読む And カウンタを移動する rs.MoveNext '次のレコードに移動しないと、とんでもないことに(笑) nRCNT = nRCNT + 1 '処理レコード数を増やす If nRCNT > MAX_行 Then '処理したレコードがMAX_行を越えた(次の列) nXLINE = nXLINE + 3 '次の列へカウンタを移動 If nXLINE > (MAX_列 * 3) Then '列が越えた? nXLINE = 1 '1列目(A列)に戻す nYLINE = nYLINE + 2 '空白行にしたいのでセット位置を+2する Else nYLINE = nYLINE - MAX_行 '列が変わったので行カウンタをマイナスする End If '見出しの表示 objEXCEL.Cells(nYLINE, nXLINE) = "郵便番号" objEXCEL.Cells(nYLINE, nXLINE + 1) = "件数" '罫線を引く(見出しの位置から+MAX_行分) Call make_Border(objEXCEL.Range(objEXCEL.Cells(nYLINE, nXLINE), _ objEXCEL.Cells(nYLINE + MAX_行, nXLINE + 1))) '行の高さを調整する objEXCEL.Rows(nYLINE).RowHeight = 高さ_見出し '見出しの高さを設定 strWORK = Trim(nYLINE + 1) & ":" & Trim(nYLINE + MAX_行) 'MAX_行範囲文字列を作成 objEXCEL.Rows(strWORK).RowHeight = 高さ_データ 'データ高さを設定 nYLINE = nYLINE + 1 '見出し表示分行数が増えます nRCNT = 1 '見出し表示後は1レコード目だよ Else ' nYLINE = nYLINE + 1 '次の行へセット位置を移動 End If Wend '通常は、ここでExcelを保存するんだけど、今回は開きっぱなしの手抜き rs.Close '開いたら閉じろ、ドアを開けたら閉めるってしつけられたでしょ(笑) Set rs = Nothing '変数も後始末しますか。使った器はキレイにしろって? End Sub |
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]