掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
リストボックスの数値を桁表示 (ID:117984)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
上記2つの関数では対象としているデータが違いますよね? 合体すると言っても何を合体できるか?を良く考えましょう。 関数全体の機能を見ると全く違う処理と言ってもいいです。 違う処理を合体するのは難しい…というか例え同じ関数内に 入れたとしても、結局コードレベルで2つ書く事になり、意味が ありません。しかし、同じ機能を持つ処理であれば共通化できます。 そういった場合、関数化します。例えば UBound(myTmp) と書けば引数として渡した配列の取りうる最大値を返して くれます。引数を変えれば使い回しができます。この場合の UBound のような関数を自分で作るのです。 そのために、2つの関数内での処理をもっと細かく、箇条書きに してみましょう。 >Refresh_List ・シート1を対象とする(With Sheets("シート1")) ・表示対象となる行数を計算する(r1 = 2,r2 = .[B65536].End(xlUp).Row,If r2 > 15 Then r1 = r2 - 14) ・表示対象となる Range を計算する( .Range(.Cells(r1, 1), .Cells(r2, 1)).Resize(, 15)) ・Range.Value でシート上のデータを取る( = .Range(.Cells(r1, 1), .Cells(r2, 1)).Resize(, 15).Value) ・ListBox4.List にデータを設定する(ListBox4.List = ) >UserForm_Initialize ・シート1を対象とする(Sheets("シート1").) ・表示対象となる Range を計算する(.Range("a1").CurrentRegion.) ・Range.Value でシート上のデータを取る(myTmp = Sheets("シート1").Range("a1").CurrentRegion.Value) ・桁表示する(myTmp(j, i) = Format(myTmp(j, i), "#,##0")) ・ListBox4.List にデータを設定する(ListBox4.List = myTmp) 見比べて Refresh_List に桁表示する機能が必要なのだから >>Refresh_List >・シート1を対象とする >・表示対象となる行数を計算する >・表示対象となる Range を計算する >・Range.Value でシート上のデータを取る ・桁表示する >・ListBox4.List にデータを設定する このままコードに戻しても取りあえずの要求は満たせそうです。 しかし、更にコードをスッキリさせるには同じ機能(単語)を 関数化します。 >・シート1を対象とする つねにシート1が対象ならグローバルな変数にシート1を セットしておいても良いですね。関数化するほどの処理は ありません。 >・表示対象となる Range を計算する Range が既に関数のような機能を持ってるので特に関数化 が必要な部分はありません。 >Range.Value でシート上のデータを取る 過去ログの Excel 関係のコードを色々調べたりはして いただけましたでしょうか?例えば過去ログ検索『Resize』 で引っ掛かる[VB6.0]のコード http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200408/04080085.txt では Rows と Cols を引数に Variant() を返す関数を 作ってます。Range を引数に Variant() を返す関数を 作っても良いかもしれませんね。 >・桁表示する 繰り返し特定の行(シート1のB列 D列 E列など)を桁表示 するなら Variant() を引数に Format した Variant() を 返す関数を作ってみてはどうでしょう。 >・ListBox4.List にデータを設定する 上の関数の戻り値を設定するのみです。 ボクなら以上のような手順でプログラミングを設計します。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.