• 締切済み

エクセルVBA 数値の桁数を揃え、つなぎたい

エクセルVBA、初心者です。 以下の記述でつまづいています。 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ Dim i As Long 'i は行数を For~Nextで変数にしてます Dim Hbc As Long, Hbc2 As Long 'Hbc は最大11桁の変数 Dim Tsc As Long, Tsc2 As Long 'Tsc は最大5桁の変数 Dim Cd As Long, Cd2 As Long 'Cd は最大4桁の変数 Dim HTC As Long      |      |    長い為、省略      |      | Hbc2 = 100000000000 + Hbc '(1) Tsc2 = 100000 + Tsc Cd2 = 10000 + Cd HTC = Right(Hbc2, 11, 11) & Right(Tsc2, 5, 5) & Right(Cd2, 4, 4) Wks1.Cells(i, 1).Value = HTC ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ Hbc、Tsc、Cd は、データベースから取得した数値が入りますが、 桁数がバラバラな為、頭に0を表示してそれぞれの最大桁数に揃えたいのです。 桁数を揃えた後、3つをつないで HTC とし、i 行目の1列目に表示しようとしています。 下記がつまづいて、解決できないでいるトコロです。 ************問題点************ (1)の行の Hbc2 = 100000000000 + Hbc という記述が Hbc2 = 10000000000# + Hbc に置き換わってしまいます。 *************************** なにぶん、初心者で、単純な間違いかもしれませんが、 どうかご指導、宜しくお願いします。

みんなの回答

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

常識的なFormat関数を使えば(使って結果の文字列&で結合する)どういう不都合がありますか。 コードだけ挙げて回答者に考えさせるのでなく、データ例に即して説明して質問すべきです。

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.3

まず、 >Dim Hbc As Long, Hbc2 As Long 'Hbc は最大11桁の変数 11桁はlongの数値範囲を超えるので、倍精度浮動小数点型か文字列か通貨型でなければ無理。 100000000000#の#はvbeが「これは倍精度浮動小数点型」と判断したのでつけたもの。 >Dim HTC As Long これはどの数値形式でも表現できないので文字列型に。 Cellにも数値形式での代入は無理で、文字列型にするしかない。 なので、 Dim Hbc As Double(またはCurrency) Dim HTC As String ... HTC = Format(Hbc, "100000000000") & Format(Tsc, "100000") & Format(Cd, "10000") Wks1.Cells(i, 1).Value =HTC または Dim Hbc As Double(またはCurrency) ... Wks1.Cells(i, 1).Value = Format(Hbc, "100000000000") & Format(Tsc, "100000") & Format(Cd, "10000") では?

  • howarage
  • ベストアンサー率20% (2/10)
回答No.2

すいません。No1のやり方だと桁落ちしちゃうんですね。 文字列として処理するなら htc = hbc2 & Format(tsc, "00000") & Format(cd2, "0000") ではいかがでしょうか?

  • howarage
  • ベストアンサー率20% (2/10)
回答No.1

HTC = Hbc2*10^9 + Tsc*10^4 + Cd2

関連するQ&A

  • ACCESS VBA の桁数指定はどこで行う?

    VBの桁数指定はどこで行うでしょうか。 Aテーブルの番号フィールドがテキストタイプで4桁です。 自動採番にしたいのですが、 (略) DIM COUNT AS INTEGER COUNT = COUNT +1 でCOUNTをデバッグで見ると1です。 これを、0001として番号フィールドに書き込む方法がわかりません。 (例)下記のようにしたい。 番号 氏名 0001 山田 0002 田中 0003 高橋  ; VBの初心者なので宜しくお願いします。 そもそも、 DIM COUNT AS INTEGERでCOUNTを4桁など、変数の桁数指定はどこで指定するのでしょうか。

  • VBA 桁数が混在するソート

    シートやセルを使わず、VBAのみでクイックソートを実装したいのですが 桁数が混在する列だと正しくソートされません。 1 1 10 10 15 2 等と言う結果になります。 元のデータは外部ファイルで修正をかけたくないので VBA内で格納したデータの桁数を調節する等解決策はありますでしょうか? 以下メソッドです Sub QuickSort1(ByRef argAry As Variant, ByVal lngMin As Long, ByVal lngMax As Long, sortnum As Integer) Dim i As Long Dim j As Long Dim vBase As Variant Dim vSwap() As Variant: ReDim vSwap(UBound(argAry)) vBase = argAry(sortnum)(Int((lngMin + lngMax) / 2)) i = lngMin j = lngMax Do Do While argAry(sortnum)(i) < vBase i = i + 1 Loop Do While argAry(sortnum)(j) > vBase j = j - 1 Loop If i >= j Then Exit Do For i3 = 1 To UBound(argAry) vSwap(i3) = argAry(i3)(i) argAry(i3)(i) = argAry(i3)(j) argAry(i3)(j) = vSwap(i3) Next i = i + 1 j = j - 1 Loop If (lngMin < i - 1) Then Call QuickSort1(argAry, lngMin, i - 1, sortnum) End If If (lngMax > j + 1) Then Call QuickSort1(argAry, j + 1, lngMax, sortnum) End If End Sub

  • ACCESSVBAで桁数を調べたい

    フォーム作成し、テキストボックスに数字を入力してコマンドボタンをクリックすると、入力してある桁数をメッセージボックスに出力するように、以下のコードを書きました。 テキストボックスに11ケタ以上の数字を入れたら、『オーバーフロー』のエラーになります。データ型を「通貨」にしても同じです。 どうしたら、11ケタ以上の数値が調べれますか? Private Sub コマンド2_Click() Dim dat As Long '桁を調べるデータ Dim cnt As Integer '10で割った回数 '変数の初期化 dat = CLng(Me!テキスト0) cnt = 0 '10で割り算 Do While dat > 0 dat = dat \ 10 '10で割る cnt = cnt + 1 '回数を数える Loop msgbox cnt & "桁", vbOKOnly, "繰り返し" End Sub

  • エクセル VBA 変数を一括で宣言したい

    こんにちは。VBAプログラム初心者です。 変数を宣言する際、 dim オーダ番号 as long, オーダ番号2 as long, …オーダ番号100 as long という内容を一括で宣言することは可能でしょうか? イメージ的には下のような感じなのですが。。。 dim i as integer for i = 1 to 100 dim オーダ番号i as long dim 単価i as long next マクロで便利にするつもりが余計面倒になっていて困っております。 解決策を教えていただけましたら幸いです。 何卒よろしくお願いいたします。

  • EXCEL VBA

    EXCEL VBAで空白行が現れたら「小計」の文字を入力したいと思い以下のように記述しましたが、うまくいきません。どこがおかしいのか教えてください。 宜しくお願いします。 Sub write小計() Dim i As Integer Dim rowcnt As Integer rowcnt = Cells(1, 1).CurrentRegion.Rows.Count Range("B1").Select For i = 1 To rowcnt If Cells(i, 2).Value = "" Then Value = "小 計" ActiveCell.Offset(1).Select Next i End Sub

  • エクセルVBAの二重ループについて

    今月VBAを勉強し始めた初心者です。 Webにて入力されたcsvファイルを編集する際に 最新投稿を残して表に出力する目的で 下記のマクロを作成して実行してみたところ 変数i、jが0になるまでループが繰り返されてエラーになってしまいます。 ループ範囲指定のどこに問題があるのでしょうか? こちら側の環境が OS:Windows7 64bit Ultimate Office2007 です。 ご教授宜しくお願い致します。 Sub namaesakujo() Dim i As Integer Dim j As Integer Dim mct As Integer Dim Name1 As String Dim Name2 As String Dim Time1 As Long Dim Time2 As Long Worksheets("result").Activate mct = Worksheets("result").UsedRange.Rows.Count '最大行数を指定 Name1 = Cells(i, 2).Value '名前1 Name2 = Cells(j, 2).Value '名前2 Time1 = Cells(i, 1).Value '時間1 Time2 = Cells(j, 1).Value '時間2 '変数iを最終行数~2行目まで指定 i = mct Do While i > 2 '変数jを最終行数~2行目まで指定 j = mct Do While j > 2 '2列目iと2列目jが等しい(名前が同じ)場合、日時が小さい方を削除する If Name1 = Name2 And Time1 > Time2 Then Cells(j, 1).EntireRow.Delete End If j = j - 1 Loop i = i - 1 Loop MsgBox "更新完了" End Sub

  • エクセルVBAでの変数

    いつもお世話になります。 今回の『壁』は”変数”です。 変数の中に更に変数を持たせることはできますか? 何をしたいかと言いますと… dim mon1 as string dim mon2 as string dim mon3 as string dim mon4 as string dim mon5 as string dim tue1 as string dim tue2 as string …というように月曜から日曜までの頭3文字プラス1~5の組み合わせの変数を作りたいのですが、 この調子で作っていくと35コになってしまいます。 そこで、曜日の頭3文字より後ろは決まって1~5のため、 dim i as integer for i = 1 to 5 next i …と組み合わせられないかと思ったのです。 どなたか知恵をお貸しください。 よろしくお願いします。

  • Excel にて変数の宣言の仕方

    Excel2002を使用しています。 標準モジュール内で下記のように変数を宣言すると Dim i,k as long (例)kには、あるセルの値を取得します。10000 Keta=len(k) この結果、ketaには、「4」という結果になります。 10000なので、「5」が返らないといけないのですが、うまくいきません。 ところが、 Dim i ,k ,m as long このように変数kの後ろに他の変数(今回はm)を記載すると、 「5」という結果が返ってきます。 変数の宣言の仕方が間違っているのでしょうか? よろしくお願いいたします。 ちなみに、 Dim k as long としても、「4」の結果が返ってきました。 同じ行に他の記載をしないとうまくいかないようです。。。

  • 変数の宣言の名称を教えてください。(Dim i As Long)

    Dim i As Longについて 「dim」→? 「i」→変数名 「As」→? 「Long」→変数の型 というように、dimとAsがなんと言えばいいのかわかりません。 アドバイスよろしくお願いします。

  • エクセルVBAのFindの不具合

    入力シートの4~2000行にデータをフォームを使って入力し、そのフォームを閉じる際に集計シートで集計する家計簿を作ってます。集計シートでは、食費・交際費などのコードがB5:B22に入っており、それぞれの合計をC5:C22に表示させたいのです。SUMIFを使えば楽なのですが、勉強のために極力VBAで処理させます。 フォームを閉じた際のソース(抜粋)は以下の通りです。 -------------------------------- Private Sub CommandButton2_Click() Dim i As Integer Dim コード As Integer Dim 金額 As Long Dim 集計行 As Integer Dim コード範囲 As Range Unload Me Set コード範囲 = Worksheets("集計").Range("b5, b22") For i = 4 To 2000 コード = Cells(i, 3).Value 金額 = Cells(i, 5).Value 集計行 = コード範囲.Find(コード).Row Next i End Sub -------------------------------- For~Nextの中はもっと処理を追加しなければならないのですが、とりあえず現段階で、   実行時エラー91(オブジェクト変数またはWithブロックが設定されていません) が   集計行 = コード範囲.Find(コード).Row の行で発生します。行番号だけを取得しようとしているので、Findの行だけを整数型変数に代入したいのですが・・・ 間違っている点をお教え下さい。 ご面倒でなければ、 Application.WorksheetFunctionに置き換える方法も教えていただければ幸いです。 よろしくお願いします。

専門家に質問してみよう