• ベストアンサー

EXCELのVBAの数字。

VBAで「Maisuu」に応じて、セルに表示される数字を制御するようにして有ります。 If iMaisuu > 1 Then suuji = Chr(48 + pg) End If というようなかんじにしてあるのですが、10を超えると数字が出なくなってしまいます。 これを回避するにはどうしたらいいのでしょうか? Win・Ex2000です。

質問者が選んだベストアンサー

  • ベストアンサー
  • gajumaru
  • ベストアンサー率57% (38/66)
回答No.2

ちは! suuji = Chr(48 + pg) ↑ここでわざわざ数字をASCIIコードを使って文字列に変えてるからじゃないでしょうか? 当然のことながら、ASCIIコードは0~9までだから、それ以降は":"とか"@"とかになってしまいますよ。 どうしても文字列にするなら普通にCStrを使ってみて下さい。 suuji = CStr(pg) にしてみましょう。

KODAMAR
質問者

お礼

できました!! ありがとうございます。 >suuji = Chr(48 + pg) >↑ここでわざわざ数字をASCIIコードを使って文字列に変えてるからじゃないでしょうか? そういわれれば、Chrってキャラクタってことなんでしょうか? なんとなくそう思って使ってました。 そうですよね、文字は10とかってないですもんね。 本当にありがとうございました。

その他の回答 (1)

  • sienna
  • ベストアンサー率35% (51/145)
回答No.1

iMaisuuが文字列型になっているということはありませんか? 数値型の宣言をするか If CINT(iMaisuu) > 1 Then でどうせしょうか?

KODAMAR
質問者

お礼

すばやい回答ありがとうございます。 >If CINT(iMaisuu) > 1 Then の方法っていうのは If iMaisuu > 1 Then suuji = Chr(48 + pg) End If を If CINT(iMaisuu) > 1 Then suuji = Chr(48 + pg) End If とすればいいのでしょうか? これですとやはり10以上が出ないです。 >数値型の宣言をするか これはどのようにすればいいのでしょうか?

関連するQ&A

  • VBA 人の目には同じ数字に見えるのに、VBAは違う数字として判定してしまう

    あるセルに1826.97792という数字が入力されており、 別のセルにも1826.97792と同じ数字が入力されています。 人間の目で見る限りまったく同じ数字です。 また、エクセル関数=if(・・・・・)で判定しても同じ数字という判定がでます。 しかしながら、VBAにて if セル1=セル2 then などとして比較すると、同じでないという判定結果になります。 どうしてこういうことが起きるのでしょうか? また、プログラムを書くうえでの対処方法はどうすればいいのでしょうか? ちなみに、数字は他の人が作ったファイルのもので、 改めて、手で入力しなおすと正しく判定されます。

  • ●Excel VBA 配列●教えて下さい

    a~tの文字が順々に文字を追っていくプログラムにしたいと思い 配列を使用したのですが…プログラムが稼動しません、 下記のプログラムでは何が足りないのでしょうか わかる方いたら教えて下さい; 配列の使い方についてアドバイスがあれば そちらも教えていただきたいです…。 '――ここから―― Dim time1 As Integer, time2 As Integer, n As String Dim X As Integer, Y As Integer Dim yoko As String, tate As String Dim suuji (19) As String Sub 描画() Cells(X, Y).Value = suuji End Sub Sub 削除() Cells(X, Y).Value = "" End Sub Sub 待機() For time1 = 0 To 1000 For time2 = 0 To 1000 Next Next End Sub Sub 座標移動() If yoko = "右" Then Y = Y + 1 Else Y = Y - 1 End If If Y = 30 Then yoko = "左" ElseIf Y = 1 Then yoko = "右" End If If tate = "上" Then X = X + 1 Else X = X - 1 End If If X = 20 Then tate = "下" ElseIf X = 1 Then tate = "上" End If End Sub Sub main() suuji (0) = a suuji (1) = b suuji (2) = c suuji (3) = d suuji (4) = e suuji (5) = f suuji (6) = g suuji (7) = h suuji (8) = i suuji (9) = j suuji (10) = k suuji (11) = l suuji (12) = m suuji (13) = n suuji (14) = o suuji (15) = p suuji (16) = q suuji (17) = r suuji (18) = s suuji (19) = t For n = 0 To 19 Cells(X,Y).Value = suuji (n) Next X = 1 Y = 1 yoko = "右" tate = "上" Do 描画 待機 削除 待機 座標移動 Loop End Sub '――ここまでです―― 何度も同じような質問をさせてもらってすみません;

  • 数字以外の入力をエラーにするには?

    分からないのでよろしくお願いします。 テキストボックスに一つでも数字以外の文字を入力したらエラーメッセージを出すようにしたいのです。小数点も不可にしたいです。 つまり、整数だけを許可したいです。 Dim suuji As string suuji= text1.Text If Not IsNumeric(CStr(suuji.ToString)) Then MsgBox("入力値が数字ではありません", MsgBoxStyle.Critical, "エラー") Exit Sub End If こうしたのですが、小数点は通ってしまいます。 どうすればいいかご存知の方、教えてください。

  • エクセルVBAについて

    エクセルVBAについて 下にある、1行目に入力された数値の、選択したセルの数値を、B5セルに表示させるマクロなのですが、1行目が結合していると、うまくB5セルに表示できません。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)  If Target.Count > 1 Then Exit Sub    '●複数セル選択は無視  If Target.Row <> 1 Then Exit Sub    '●1行目以外の選択は無視  If Target.Column > 6 Then Exit Sub   '●F列目以降の選択は無視  If Target.Value = "" Then Exit Sub   '●選択セルが未入力なら無視    Range("B5").Value = Target.Value End Sub このマクロで、結合しているセルをB5に表示させることはできますでしょうか? 1行目で選択するセルは、すべて2つのセルが結合しています。 よろしくお願いいたします。

  • セルが何行なのかをVBAで取得したい

    セルが何行なのかをVBAで取得したいのですが どういうコードにすればいいですか? 例えば、A1セルに a b c と入ってる場合、3行ですが それをVBAで取得するにはどうすればいいですか? Sub test() Dim r As Range Set r = Cells(1, 1) If r.Value Like "*" & Chr(10) & "*" Then MsgBox "改行があります" End If End Sub というコードで改行が有ることは取得できたのですが 何行かまでは取得する方法がわかりません。

  • エクセルVBA 重複を表示したい

    エクセルVBA 重複を表示したい A列で重複すると警告するコードを以下のように作成しました。 これを修正してA列で重複して、なおかつB列でも重複した場合警告するコードにしたいのです。 添付した図では「同姓同名あり、確認してください、鈴木一郎、山口」と表示したいのです。 ご教授よろしくお願いします。 Sub test() Dim myRange As Range Dim 同一flag As Boolean Dim MsgStr As String For Each myRange In Range("A2:A10") If WorksheetFunction.CountIf(Range("A2:A10"), myRange) > 1 Then If 同一flag = False Then 同一flag = True If InStr(1, MsgStr, myRange) = 0 Then MsgStr = MsgStr & myRange & vbCrLf End If End If Next If 同一flag = True Then MsgBox "同姓同名あり" & Chr(13) & _ "確認してください" & Chr(13) & _ vbCrLf & MsgStr Else End If End Sub

  • Excel VBA Worksheet_Change イベントについて

    Excel VBA Worksheet_Change イベントについて質問です。 セルH8とI8を結合し、入力規則よりリストボックスを配置しました。 本シートにWorksheet_ChangeをVBAで作成しましたが、 セルH8:I8をDeleteすると実行時エラー13が発生します。 If Target = "" then exit sub end if や If Target.value = "" then exit sub end if や If Target <> "" then 処理 end if としても対処できませんでした。 よい対処方法のアドバイスよろしくお願いします。

  • 数字と数字のー(ハイフン)は消去しないVBA

    Private Sub Worksheet_Change(ByVal Target As Range) Dim myAsc As Integer, InSP As Integer, myFlag As Integer Dim myStr As String If Intersect(Target, Range("B4:CH4")) Is Nothing Then Exit Sub If Application.CountBlank(Target) > 0 Then Exit Sub Application.EnableEvents = False Target = StrConv(Target, vbUpperCase + vbNarrow) myStr = Target.Value InSP = 0: myFlag = 0 For i = 1 To Len(myStr) myAsc = Asc(Mid(myStr, i, 1)) If Not (myAsc >= 65 And myAsc <= 90) Then If Not (myAsc >= 48 And myAsc <= 57) Then If myAsc = 32 Then InSP = i Else MsgBox ("-(ハイフン)は使用出来ません。クリアします。" & "" & Mid(myStr, i, 1) & "") Target.Select ' Selection.ClearContents Application.EnableEvents = True Exit Sub End If ElseIf myFlag = 0 And InSP = 0 Then myFlag = i End If End If Next If myFlag <> 0 Then Target.Value = Left(myStr, myFlag - 1) & Mid(myStr, myFlag, 99) End If Application.EnableEvents = True End Sub B4:CH4の範囲で半角英数字の小文字で入力したら自動で大文字となり、-(ハイフン)を入力したら文字がクリアされるVBAがあります。 質問ですが先ほどのVBAで英字と数字の間のー(ハイフン)はクリア対象となり、数字と数字の間にー(ハイフン)の場合はクリアしないVBAはどの様にすれば良いでしょうか? ※「GRE-879」の時は消去対象となり、「GRE868-76」の時は消去しない感じです。

  • EXCEL VBA 指定した数字ごとに表示

    ・1から3までの数字をいれた場合に、9:00から11:00と表示する場合として以下のソースを書きます。(以前にこちらで教えていただきました) ・a = array()の部分について、直接書くのではなく、セルを参照することはできますでしょうか? a = array("cell(1,1)", "cell(1,2)", "cell(1,3)")みたいなイメージです。 よろしくお願い致します。 option base 1 private sub Worksheet_Change(byval Target as excel.range)  dim h as range  dim a as variant  a = array("9:0", "10:0", "11:0") ’1から3  on error resume next  for each h in application.intersect(target, range("D:D"))   if cells(h.row, "F") <> "○" then   if 1=< h.value and h.value <= 3 then  ’1から3   if time >= timevalue(a(h.value)) then    cells(h.row, "F") = a(h.value)   end if   end if   end if  next end sub

  • エクセルVBA 重複を表示したい2

    エクセルVBA 重複を表示したい2 以下ではたいへんお世話になりありがとうございました。 http://okwave.jp/qa/q5849885.html 上記に関連する質問をさせていただきます。 下記に提示したコードを修正して、以下のようなコードに変えたいと考えています。 「B列で重複したデータがあれば、そのすべてを左隣のデータと一緒に表示したい」 添付した図だと、 1小沢一郎 7〃 8〃 4鈴木一郎 6〃 以上のような感じです。 アドバイスよろしくお願いします。 Sub TEST() Dim myRange As Range Dim 同一flag As Boolean Dim MsgStr As String m_Rows = Range("b" & Rows.Count).End(xlUp).Row For Each myRange In Range("b2:b" & m_Rows) If WorksheetFunction.CountIf(Range("b2:b4000"), myRange) > 1 Then If 同一flag = False Then 同一flag = True If InStr(1, MsgStr, myRange) = 0 Then MsgStr = MsgStr & myRange.Offset(0, -1).Value & myRange & vbCrLf End If End If Next If 同一flag = True Then MsgBox "同姓同名あり" & Chr(13) & _ "確認してください" & Chr(13) & _ vbCrLf & MsgStr Else End If End Sub

専門家に質問してみよう