i = 1 i1 = 1 Do Until i > 168 On Error Resume Next If RowPN(i) <> "" Then UF6ComboBox1.AddItem RowPN(i), i1 i1 = i1 + 1 End If i = i + 1 Loop 0071デフォルトの名無しさん (ワッチョイ c26f-CicO)2017/07/01(土) 11:20:29.10ID:PX/A+v/i0 VBAの試験って、やっぱ何らかの制限付きなんだろうか。 制限しないと、ソートにSQLとか、Worksheetfunctionとか、 Cells(1,1).Value="計算式"とか、正解だけど、試験の趣旨としてどうなの? という答えが沢山出来てしまう。 0072デフォルトの名無しさん (ワッチョイ 4211-nP2k)2017/07/01(土) 11:27:20.68ID:+dYABl5A0>>70 ・RowPNの中身が全て""またはEmptyになっていないか。 Dubug.Printまたはローカルウィンドウでの確認を推奨する。 ・リストボックスと言っているが変数はUF6ComboBox1で合っているか。 ・RowPNの要素が(0 To 166)ないし(1 To 167)だとDoループがi=168までカウントするのでインデックスエラーになる。 For文の方が無難そうに思えるのと、ここでOn Error Resume Nextはどうかと感じる。 0073デフォルトの名無しさん (ワッチョイ 0623-wjSU)2017/07/01(土) 11:30:18.64ID:5ubPuGy00>>70 セルから値をとってるならこれでいいと思われ
この程度の処理を数百のセルに行うのに結構な時間がかかる。 短時間で完了させるにはどうしたらいいんでしょうか? ある程度のセル範囲ごとにまとめて書式貼り付けすればいいんでしょうか? 0090デフォルトの名無しさん (ワキゲー MM8a-I/sj)2017/07/03(月) 20:38:08.97ID:MkRtof65M>>89 正確な日本語でよろしく 0091デフォルトの名無しさん (ワッチョイ 65c1-ZBdv)2017/07/03(月) 20:39:25.48ID:u6VhpuAl0 Sub nisinsu() Dim Z As Single, S As Long, N As String, A As String Z = 100 S = 1 Do Until Z <= 0 N = Z Mod 2 Cells(S, 1) = Z Cells(S, 2) = N Z = Z \ 2 S = S + 1 A = N + A Loop Cells(1, 3) = A End Sub
上の方で2進数について質問したものです このコードである程度無事に解決しましたが、一つ分らないことがあります Loop を抜けた後の Cells(1, 3) = A の所は Loopの一つ上の A = N + A によって 1100100 と正しい数字が表示されます しかしこの A = の中を A = A + N というように A と N を逆にすると 10011 と全く別の数字になってしまいます この理由がどうしてなのかを教えてください 0092デフォルトの名無しさん (ワッチョイ bd8b-UM0m)2017/07/03(月) 20:39:42.65ID:c364q6zP0>>89 性格悪い日本語でよろしく 0093デフォルトの名無しさん (ワキゲー MM8a-I/sj)2017/07/03(月) 20:45:47.19ID:MkRtof65M>>91 まずはおめでとう!
Public Sub シートの書式を設定する() Dim iRow As Long, iCol As Long, LastRow As Long, ws As Worksheet, r As Range Application.ScreenUpdating = False Application.EnableEvents = False Set ws = ThisWorkbook.Worksheets("対象シート") startRow = 4 LastRow = ws.Cells(Rows.Count, "B").End(xlUp).Row For iRow = startRow To LastRow For iCol = 4 To 100 Set r = ws.Cells(iRow, iCol) If IsNumeric(r.Value) Then If r.Value > 0 Then r.Select ws.Cells(1, "C").Copy r.PasteSpecial Paste:=xlPasteFormats DoEvents ElseIf r.Value < 0 Then r.Select ws.Cells(2, "C").Copy r.PasteSpecial Paste:=xlPasteFormats DoEvents End If End If Next iCol Next iRow Application.ScreenUpdating = True Application.EnableEvents = True End Sub 0103デフォルトの名無しさん (ワッチョイ c26f-CicO)2017/07/03(月) 22:28:05.66ID:9w7qW4Z10>>96 >なんかブックを開くときに重くて
Sub nisinsu() Dim Z As Single, S As Long, N As String, A As String Dim AA As Single Z = 100 S = 1 Do Until Z <= 0 N = Z Mod 2 Cells(S, 1) = Z Cells(S, 2) = N Z = Z \ 2 A = N + A Cells(S, 4) = A AA = AA + N Cells(S, 5) = AA S = S + 1 Loop Cells(1, 3) = A End Sub 0110デフォルトの名無しさん (ワッチョイ 4211-nP2k)2017/07/04(火) 00:10:14.68ID:pX4cRUUJ0>>102 <0と>0をUnionでまとめてからコピペしたら速くなりそう。 ただUnionのセル数が増えすぎるとUnion自体が遅くなるみたいなので、1〜数十行くらいで区切ったほうがいいかも?