• ベストアンサー

EXCEL インデックスが有効範囲にありません

エクセルでマクロを使ったソフト(他人が作ったもの)を使っているのですが、 計算の途中で「インデックスが有効範囲にありません」という エラーが出てしまい困っています。 同じ量の他の数値(サンプル数91、属性9)でやるとエラーがでないのですが、今やっている文字列のときだけエラーが出るといった場合 何が考えられるでしょうか?以下はデバッグ結果です。 'For j = 2 To M - 1 '列に関する繰り返し MaxMax = MaxI iflag = 0 For j = 2 To iR - 1 '上限? kkk = 1 For i2 = 1 To MaxI For i = 1 To MaxMax If C(i) = "" Or B(i2, j) = "" Then 'Exit For Else If Trim(C(i)) = Trim(B(i2, j)) Then D(kkk) = B(i2, j) B(i2, j) = "" kkk = kkk + 1 Else If InStr(1, C(i), B(i2, j), 1) <> 0 Then D(kkk) = C(i) C(i) = "" kkk = kkk + 1 iflag = 1 End If End If End If Next i 'If iflag = 1 Then ' B(i2, j) = "" ' iflag = 0 'End If Next i2 For i = 1 To MaxMax For i2 = 1 To MaxI If C(i) = "" Or B(i2, j) = "" Then 'Exit For Else D(kkk) = C(i) & B(i2, j) kkk = kkk + 1 End If Next i2 Next i For i = 1 To kkk - 1 '簡略,exp.P and TP,, For i2 = 1 To kkk - 1 If i <> i2 And D(i) <> "" And D(i2) <> "" Then If Len(D(i)) > Len(D(i2)) Then L1 = Len(D(i)) L2 = Len(D(i2)) If Comp(D(i), D(i2), L1, L2) = 1 Then D(i) = "" 'Exit For End If Else L2 = Len(D(i)) L1 = Len(D(i2)) If Comp(D(i2), D(i), L1, L2) = 1 Then D(i2) = "" 'Exit For End If End If End If Next i2 Next i i2 = 1 For i = 1 To kkk - 1 If D(i) <> "" Then Cells(i2, iR + j) = D(i) C(i2) = D(i) ←ここがエラー i2 = i2 + 1 End If Next i MaxMax = i2 - 1 Next j 上記文章だけでは何も分からないとは思うのですが、 何か分かる方がいらっしゃればお願いいたします。

  • upas
  • お礼率89% (239/266)

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

『変数の宣言箇所と代入箇所を教えてください。  例えば』 っていうのと、 『推定される kkk の最大値よりも変数 C の配列サイズを大きめに取っておかないとダメでしょう。おそらく。』 『Dim C(100) As Long  この100の箇所の変更が必要ではないですか?』 この意味が伝わらなかったでしょうか。 Dim C(1 To 5000) といった変数宣言箇所を見つけて、この5000を10000に変更してください。 プロシージャの最初のほうに記述があるはずです。

upas
質問者

お礼

MMを100にして10000行まで計算できるようにしたのですが、 やはり計算の範囲を超えてしまいました。 最大が109*100で、それを超えると6つ目のDimのD(3*NN*MM)でオーバーフローしてしまいます。 重ねての質問で申し訳ないのですが、さらに拡大した行で計算するにはどのような方法があるでしょうか? Integerを全部Longに変えてみたのですが、同じ場所でオーバーフローしてしまいます(他にも変えるべき場所があるのでしょうか) 最初の質問については分かるようになってきました。 度々ご回答ありがとうございました。

upas
質問者

補足

よく分かっていませんでした。 宣言箇所は下記のことでしょうか。 Const iStartR = 1 Const iStarL = 4 Const NN = 100 Const MM = 50 Dim i As Integer, j As Integer, k As Integer, k1 As Integer, i1 As Integer, ii As Integer, i2 As Integer Dim iNumber(NN) As Integer, iSum As Integer, iKind As Integer Dim Y(NN), Y_Stander Dim a(NN, MM), AA(NN, MM, NN), B(NN * MM, NN) Dim MaxK As Integer, iR As Integer, MaxI As Integer, iflag As Integer, kkk As Integer, MaxMax As Integer Dim C(NN * MM), D(3 * NN * MM), CP(NN * MM) Dim L1 As Integer, L2 As Integer, RRR As Integer Dim SheetName As String, sP As String Dim N As Integer, M As Integer Dim iSumL As Integer 'まとめシートに出力用 現在Const NNとConst MMの値を変えて再計算しています。 結果がでましたら、お礼の方書かせて頂きます。

その他の回答 (7)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.8

>最大が109*100で、それを超えると6つ目のDimのD(3*NN*MM)でオーバーフローしてしまいます。 >重ねての質問で申し訳ないのですが、さらに拡大した行で計算するにはどのような方法があるでしょうか? >Integerを全部Longに変えてみたのですが、同じ場所でオーバーフローしてしまいます(他にも変えるべき場所があるのでしょうか) Sub test()   'これはエラーです。演算結果がInteger範囲値を超えるのでオーバーフローです。   '(Integer * Integer の演算結果は Integer)   MsgBox 3 * 200 * 200   'Longの型宣言文字『&』を付加すると良いです。   '(Long * Integer の演算結果は Long)   MsgBox 3& * 200 * 200 End Sub ∴ Const NN = 200 Const MM = 200 D(3& * NN * MM) としてください。 または Const NN As Long = 200 Const MM As Long = 200 Const X As Long = 3 Dim D(X * NN * MM) As Variant '文字列ならString などのように、個々明確に型を宣言したほうが良いと思います。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんにちは。 最初に、ツールで集計を取ってみると、以下の変数が使われずに浮いているようですから、この後もあるようです。 iStartR, iStarL ,k ,k1 ,i1 ,ii ,iNumber ,iSum ,iKind ,Y(NN) ,Y_Stander ,a(NN, MM) ,AA(NN, MM, NN) MaxK ,CP(NN * MM) RRR ,SheetName, sP, N, iSumL エラーが起こる周辺を出して解決する場合、ここでは、C()の配列で問題が起こるようなら、単純に、変数の宣言部分を増やせばよいのですが。 >Dim C(NN * MM), D(3 * NN * MM) 'バランスが合わないので、    ↓ Dim C(3 * NN * MM), D(3 * NN * MM) とすれば合うはずです。 この書いた人は、素人ではないようですから、それで、「68行目はi=7816 kkk=9283」(本来は、この時点でアウト)でエラーが発生するような問題は起こるはずがないと思いますから、使い方自体が想定外のミスではないでしょうか? また、3次元配列変数まで使っているようですし、このコードは、Variant 型が多いようですから、数万個のIndex を越えるような宣言は、注意したほうがよいのではないかと思います。また、インクリメント変数も、Integer にしていますが、1万を標準的に越えているので、本来は、Long 型のほうが無難ですね。 ユーザー定義関数のComp もあるようです。本当は、全体を見通して、その上で修正しないと正確なところは出てこないと思います。 出来れば、全体の構造をみた上で、編集や調整をしたほうがよいと思います。ただ、インターネット検索しても、ヒットしないようですから、この作者のコードの著作権の考え方の確認をしたほうが良いのではないでしょうか?インターネットで公開されているものなら、出典等を公開していただくか、作者ご本人に内容を確認していただいたほうがよいと思うのです。

upas
質問者

お礼

長文を読んで回答して頂きありがとうございます。 はい、おっしゃる通りこの式を書いたのはきちんとした人なので、間違っているのは私だと思います。 やはり1万行を超えるようなこと自体想定外なのでしょうね…。 作者本人に連絡をとれるツテは一応あるのですが、私自身の些細なミスかもしれないと思い今回質問させていただきました。 C()に関してのアドバイスもしていただきありがとうございました。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.6

#1、#3です。 #4さんの回答への補足に答えがありますね > Dim C(NN * MM), D(3 * NN * MM), CP(NN * MM) (中略) > Const NN = 100 > Const MM = 50 配列Cの大きさを MM*NN=50×100=5000と演算結果で定義している。 (#4さんの指摘にある 「Dim C(1 To 5000)」の部分です) > i2は#2の方の方にも書きましたが5001が入っています。 参照可能なのが5000までだから、定義されていない5001を参照しようとしてエラーになっていますね。 ご質問本文 > 同じ量の他の数値(サンプル数91、属性9)でやるとエラーがでない > 今やっている文字列のときだけエラーが出る 「今やっている文字列のサンプル数」とは100を越えてますか? NNを「今やっている文字列のサンプル数」以上に意義しなおすと解決しそうですね。

upas
質問者

お礼

サンプル数は同じ91です。 サンプルにはそれぞれの属性が9つ(例:A2B1C2D4E6F7G4H4など)はいっており、サンプル同士の共通の属性の組み合わせを求めます。 #4さまのお礼の方にも書かせていただいたのですが、 109*100の計算が限度でそれでもやはり行数が足りないのです…。 最初の質問とは違ってしまいますが エクセルのMax行(6万?)まで計算できるようにするにはどのようにすればいいでしょうか。 IntegerをLongに変えたのですがうまく反映されませんでした。 度々回答して頂きありがとうございました。

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

同じようなエラー(「「インデックスが有効範囲にありません」)は ーー配列の上限超え Sub test01() Dim d(3) For i = 0 To 4 d(i) = 1 Next End Sub ーーシートインデックス指定 現状シートは4つしかない。Sheets(5)は存在しない。 Sub test03() For i = 1 To 5 Sheets(i).Range("A1") = 1 Next i End Sub などで出る。 >C(i2) = D(i) ←ここがエラー なら、実行しているうちにi2が表す数が、配列のg右舷上限定義を超えてしまっている、エラーでしょう。 質問のコード部分にはC、Dの配列定義されている部分は見えないようだ。実際はどうなっているかな。

upas
質問者

お礼

#4さまの補足に書かせていただいたのですが、 5000までしか行を用意していなかったがそれでは足りないということだったようです。 現在は10900行までしか用意できずそちらでも苦戦しています…。 長文を読んでご回答して頂きありがとうございました。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

#1です。 VBAソースをコピペされているので、VBEは開けますね? 1)68行目にカーソルをおいてf9キーを押してください。 2)f5キーで実行。 68行目で一時停止するので、カーソルをkkkにもっていくと値が表示されます。 f8キーを押すと一行ずつ実行します。f5キーで連続実行。 73行目でiの値も確認してください。 #2さんのご指摘の確認も、カーソルをcにもっていくと値が表示されますので確認してください。

upas
質問者

お礼

最初に書き忘れたのですが計算では、サンプルの中の属性の組み合わせをみています。集合の計算のはずです(細かい計算内容は分からないのですが…) 一度消してしまったので再計算してました。以下はデバッグ画面で書かれていたことを書きます。 68行目はi=7816 kkk=9283でした。 73行目がどこをさしているのか分からなかったのですが、iにはすべて7816という数字が入っていました(デバッグ画面だからでしょうか?) i2は#2の方の方にも書きましたが5001が入っています。 それぞれの値が何を指しているのか?は申し訳ないのですが分かりませんでした。 色々と無知で申し訳ありません。回答ありがとうございました。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

>C(i2) = D(i) ←ここがエラー 変数 C って何ですか? 変数の宣言箇所と代入箇所を教えてください。 例えば Dim C(100) As Long For i = 0 To 100   C(i) = Cells(i).Value Next とか Dim C As Variant C = Application.Transpose(Range("A1:A100").Value) とかの箇所。 単純に考えれば、Loopインデックスの変数 i2 が、配列変数 C の添字の最大値を超えている為のエラーでしょう。 デバッグ時に C(i2) の i2 部分にマウスカーソルをあてると i2=??? という感じで変数の中身が見れますから確認してください。 推定される kkk の最大値よりも変数 C の配列サイズを大きめに取っておかないとダメでしょう。おそらく。 変数 C への値代入方法にもよりますが Dim C(100) As Long この100の箇所の変更が必要ではないですか? >同じ量の他の数値(サンプル数91、属性9)でやるとエラーがでないのですが、 >今やっている文字列のときだけエラーが出るといった場合 よく解らないけど、C と B の要素が一致する量が多いからなのでしょうね。

upas
質問者

お礼

変数Cは、デバッグでは補足欄のようになっています。 D(i)にマウスカーソルを当てると、B11H4F1J1というセルに入力されている文字が書いてあります。 i2は5001となっていました。 5001行目で計算が止まっているので、5001は行数のことのような気がします。 ということはCはセルのことで設定の最大行数が5001となっているということなのでしょうか。 長文読んで回答して頂きありがとうございました。

upas
質問者

補足

'よこ方向の×算 iflag = 0 For i = 1 To MaxI '第2列を基準に入れる If B(i, 1) = "" Then ii = i - 1 Exit For Else C(i) = B(i, 1) End If Next i

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> C(i2) = D(i) ←ここがエラー この行を71行目と数える場合の68行目 > For i = 1 To kkk - 1 ここの変数kkkは、うまくいく場合・いかない場合でそれぞれいくつですか? 6行目で1を設定、16・21・38行目で加算していますが どこかで加算される回数が異なるはず。 空白(何もない=NULL)と思っているが実はスペースがあるために KKKの加算結果が異なるのでは?

upas
質問者

お礼

申し訳ありません、今の私の知識ではデバッグの文章を読んでも kkkについてよく分かりませんでした。 空白~というのはありそうです。探してみます。 わざわざ長文を読んで回答して頂きありがとうございました。

関連するQ&A

  • ExcelのVBAがオーバーフローに!?

    読んで頂きありがとうございます。 以前に質問しました時に回答を頂き凄く助かっていたのですが、何故か「オーバーフロー」と表示されてしまいます。 ひょっとしたら桁なのかも知れません。 下記のVBAを教えて頂きしようしていました。 Option Explicit Sub Test() Dim c(), p(), q(), i, j, l, r, k As Long r = Range("B2").End(xlDown).Row l = Range("D2").End(xlDown).Row ReDim c(r - 2), p(r - 2), q(r - 2) For i = 1 To r - 2 c(i) = Cells(i + 2, 2).Value p(i) = Cells(i + 2, 3).Value q(i) = i + 2 Next i For i = 1 To r - 3 For j = i + 1 To r - 2 If c(i) > c(j) Then k = c(i) c(i) = c(j) c(j) = k k = p(i) p(i) = p(j) p(j) = k k = q(i) q(i) = q(j) q(j) = k End If Next j Next i For i = 1 To r - 2 Cells(i + 2, 7).Value = c(i) For j = 3 To r If Cells(j, 4).Value = c(i) Then Cells(i + 2, 8).Value = p(i) - Cells(j, 5).Value If p(i) - Cells(j, 5).Value <> 0 Then Range("B" & q(i)).Interior.ColorIndex = 6 Range("D" & j).Interior.ColorIndex = 6 End If Exit For End If Next j Next i For i = 3 To r k = 0 For j = 3 To l If Cells(i, 2).Value = Cells(j, 4).Value Then k = 1 Exit For End If Next j If k = 0 Then Range("B" & i).Interior.ColorIndex = 35 End If Next i For i = 3 To l k = 0 For j = 3 To r If Cells(i, 4).Value = Cells(j, 2).Value Then k = 1 Exit For End If Next j If k = 0 Then Range("D" & i).Interior.ColorIndex = 35 End If Next i End Sub デパックのClickすると15行目辺りの「k = c(i)」が黄色くなります。 正直言ってマクロとか全く解りませんが、コピーして使っていました。 どこをどう変更すれば良いのか教えて頂ければ助かります。 よろしくお願いします。

  • エクセルVBAを修正したい

    数字を入力すると記号に変換になるマクロを 元ファイルを修正して作成したいのですが、 同一シートにC9:M33,C9:Y25,O27:Y29といった 範囲の異なる表がある場合はセル範囲をどのように記述すれば良いでしょうか? StartCol = 4 '開始列 EndCol = 20 '終了列 BlankCount = 0 I = 16 '開始行 L = 14 '行の指定 Do While Len(Range("B" & CStr(I)) & Range("C" & CStr(I))) > 0 For J = StartCol To EndCol If Len(ActiveSheet.Cells(L, J).Value & ActiveSheet.Cells(L + 1,J).Value) > 0 Then tmp = "" If ActiveSheet.Cells(I, J).Value = "×" Or ActiveSheet.Cells(I,J).Value = "中止" Then Else If Len(ActiveSheet.Cells(I, J).Value) = 0 Then K = -1 Else K = ActiveSheet.Cells(I, J).Value End If Select Case K Case 0 tmp = "×" Case 1 To 14 tmp = "△" Case Is >= 15 tmp = "○" End Select End If Next I = I + 1 If Len(Range("B" & CStr(I)) & Range("C" & CStr(I))) = 0 Then L = I + 1 I = I + 3 End If Loop End Sub

  • EXCEL VBA2010 MsgBox

    Sub 重複() Dim i As Long, j As Long For i = 6 To 500 For j = 3 To 3 If WorksheetFunction.CountIf(Range("C6:C500"), Cells(i, j)) > 1 Then Cells(i, j).Interior.ColorIndex = 6 End If Next j Next i End Sub このVBAに重複が何件ありますよというメッセージを出したいです。 MsgBoxの入れ方を教えてください。

  • Excel VBA ExecuteExcel4Macroについて

    こんにちは。よろしくお願いします。 あるフォルダ"D:\test"のなかに、4つのxlsファイル"o.xls"、"a.xls"、"b.xls"、"c.xls"があるとします。 使用するシート名は、それぞれo,a,b,c(ファイル名から".xls"を除いたもの)とします。 このとき"o.xls"を開いて、下記のマクロを実行すると、1行目にパス名、2行名にファイル名、3行目以下に(1列目は"a.xls"の、2列目は"b.xls"の、3列目は"c.xls"の)セルA3以下が読み込まれます。 たとえば、結果は添付の図のようになります。図がうまくアップできなかったらごめんなさい。 Sub sample1() Application.Calculation = xlManual Application.ScreenUpdating = False Application.DisplayAlerts = False On Error Resume Next Worksheets("o").Cells.Clear Dim p As String, fn As String, fc As Long, i As Long, j As Long, d, e p = ActiveWorkbook.Path fn = Dir(p & "\" & "*.xls", 0) fc = 0 If fn <> "" Then fc = fc + 1 For j = 3 To 6 With Worksheets("o") .Cells(1, fc).Value = p & "\" & fn .Cells(2, fc).Value = fn d = ExecuteExcel4Macro("'" & p & "\[" & fn & "]" & Mid(fn, 1, Len(fn) - 4) & "'!R" & j & "C1") If d = 0 Or IsError(d) Then Exit For Else .Cells(j, fc) = d End If End With Next j End If Do fn = Dir() If fn <> "" Then fc = fc + 1 For i = 3 To 6 With Worksheets("o") .Cells(1, fc).Value = p & "\" & fn .Cells(2, fc).Value = fn e = ExecuteExcel4Macro("'" & p & "\[" & fn & "]" & Mid(fn, 1, Len(fn) - 4) & "'!R" & i & "C1") If e = 0 Or IsError(d) Then Exit For Else .Cells(i, fc) = e End If End With Next i Else Exit Do End If Loop Application.ScreenUpdating = True Application.DisplayAlerts = True Application.Calculation = xlAutomatic End Sub 上記の例は変数iとjが3から6までしか動きませんし、読み込むxlsファイルも3つしかありませんのですぐに終わりますが、実際には行やファイルがもっとたくさんあり、非常に時間がかかっています。そこで、 ExecuteExcel4Macro("'" & p & "\[" & fn & "]" & Mid(fn, 1, Len(fn) - 4) & "'!R" & i & "C1") を e = ExecuteExcel4Macro("'" & p & "\[" & fn & "]" & Mid(fn, 1, Len(fn) - 4) & "'!R3C1:R6C1") というような風にして、For~Nextも使用せず .range(Cells(3, fc),cells(6, fc)) = e というふうに範囲で読み込もうとしたのですがうまくいきません。 ExecuteExcel4Macroは範囲を読み込むことはできないのでしょうか? 何とかして処理速度を上げたいのですが、どうすればよいでしょうか。

  • EXCEL VBAのFor...Nextについて

    VBA初心者です。よく理解していませんので、質問も的を得ていないかもしれませんが、ご指導宜しくお願いいたします。  現在、For...Nextを使った表計算をしています。 A列に「す」という文字が含まれていたら、B列の「す」の行に「あ」と「い」と「え」「か」のセルの合計をだす。C列、D列・・・最終列まで計算する。 上記VBAを作成する方法を教えて下さい。 A  B  C  D  E   F  G  H  I  J  K  L 1 2    3    4   5    6    7    8    9    10    11 12 あ  1 2 3 4   5 6 7 8 9 10 11 い 10 20 30 40  50 60 70 80 90 100 110 う 20 30 40 50   60 70 80 90 100 110 120 え 40 50   60  70 80 90  10 20 120 130 30 お 50 60   70  80 90 10  20 30 130 140 40 か 60 70   80  90 10 20  30 40 140 150 50 す 私は表に1~12まで数字をインプットし下記のようなコードを考えました。 Sub 列合計() Dim i, k, l, m, n As Long j = 2 For i = 6 To 120 For k = 6 To 120 For l = 6 To 120 For m = 6 To 120 For n = 6 To 120 If Cells(i, 1) = "す" And Cells(k, 1) = "あ" And Cells(l, 1) = "い" And Cells(m, 1) = "え" And Cells(n, 1) = "か" Then Do While j <= Range("A2").End(xlToRight) Cells(i, j) = Cells(k, j) + Cells(l, j) + Cells(m, j) + Cells(n, j) j = j + 1 Loop Else: End If Next n Next m Next l Next k Next i End Sub この内容だとエラーが出てしまいます。 補足ですが、あいうえおかの順番はかわったり、間に他の行が入ったりします。 また今回はL列の間としましたが、もっと列が増え、最終列まで計算する方法を知りたいのですが、どうぞ宜しくお願い致します。 ※ofice2013です。

  • VBAtest

    VBAおn以下の Sheets("OP").Select Dim atai As String atai = Cells(2, 2).Value Dim datedata(40) As String For j = 0 To 40 If Cells(j + 3, 2).Value = "" Then Else datedata(j) = Cells(j + 3, 2).Value End If Next Dim shihyou As String For i = 1 To 2 shihyou = Cells(2, i + 2).Cells.Value Sheets(shihyou).Select Dim tmp_c As Integer For r = 1 To 10 tmp_c = 0 For c = 1 To 10 If tmp_c = 0 Then If Sheets(shihyou).Cells(r, c).Value = atai Then tmp_c = c End If Else Dim vals(40) As String For k = 0 To 40 For l = 1 To r + 41 For m = 1 To tmp_c - 1 If Sheets(shihyou).Cells(l, m).Value = datedata(k) Then vals(k) = Sheets(shihyou).Cells(l, tmp_c).Value End If Next Next Next End If Next Next Sheets("OP").Select For k = 3 To 43 Cells(k, i + 2).Value = vals(k - 3) Next Next End Sub

  • エクセルで表を展開するマクロを作りたい

    こんにちは。 エクセルで表を展開したいのですがマクロが作れません。 どなたか詳しい方教えて下さい。     A   B   C  D 1  1,2,3  abc  def  ghi を    A   B   C  D 1  1 abc  def  ghi 2   2  abc  def  ghi 3  3  abc  def  ghi というように展開したいです。 10列目くらいまで対応したマクロが作りたいです。 Sub test() 'この行から Dim i, j, k As Long Dim myArray As Variant For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 If Not Cells(i, 1) Like "*" & "," & "*" Then i = i - 1 myArray = Split(Cells(i, 1), ",") k = UBound(myArray) Rows(i + 1 & ":" & i + k).Insert For j = 0 To k Cells(i + j, 1) = myArray(j) Next j Next i For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 2) = "" Then Cells(i, 2) = Cells(i - 1, 2) End If Next i Columns("A:B").AutoFit End Sub 'この行まで これにどう付け足せばいいでしょうか? どうかご教授お願い致します。

  • ExcelのVBAで下線部分の取得・文字の挿入

    画像のように、A列の文字をC列のようにしたいと考えています。 http://okwave.jp/qa/q4307830.htmlを参考に以下のコードとしました。 Sub test01() Dim i As Integer, n As Integer, s As Integer, l As Integer i = Len(ActiveCell) For n = 1 To i If ActiveCell.Characters(n, 1).Font.Underline <> xlNone Then s = n Exit For End If Next If s > 0 Then For n = s + 1 To i If ActiveCell.Characters(n, 1).Font.Underline = xlNone Then l = n - 1 Exit For End If Next End If If l = 0 Then l = i End If MsgBox "開始点:" & s & vbCrLf & "終了点:" & l End Sub ところが、A5,A6の処理がうまくいきません。また、"["や"]"の挿入の方法もわかりません。 教えていただければ幸いです。よろしくお願いいたします。 使用OS:Windows7 使用ソフト:Microsoft Excel 2000~2010

  • インデックスが有効範囲に出ないと出る

    下記のようなVBAを書きました。しかしインデックスが有効範囲にないとメッセージがでるのですが、どこがまちがっているでしょうか?? Sub macro1() Dim i As Long Dim r As Long Worksheets("フェアリスト ").Select Worksheets("csv").Range("A:C").ClearContents For i = 2 To 50 Step 5 If Worksheets("フェアリスト").Cells(11, i + 1) <> "" Then r = Worksheets("フェアリスト").Cells(65536, i + 1).End(xlUp).Row Worksheets("フェアリスト").Range(Cells(11, i), Cells(r, i + 3)).Copy _ Destination:=Worksheets("csv").Range("B65536").End(xlUp).Offset(1) Worksheets("csv").Range("A65536").End(xlUp).Offset(1).Resize(r - 3, 1).Value = Worksheets("フェアリスト").Cells(8, i).Value End If Next i Worksheets("csv").Range("A1:C1").Delete shift:=xlShiftUp End Sub

  • 乱数で・・・

       ラベル10枚に1~10までを乱数を入れたいのです ただしダブらない どうすればいいのでしょうか?? 自分で考えたのですがバグがあります ※コマンドをクリック ※クローンは用意済み Private Sub Command1_Click() Dim a(0 To 9) For i = 0 To 9 a(i) = Int(Rnd * 10)+1  For b = 0 To 9   If a(i) = a(b) Then     If i <> b Then     a(i) = Int(Rnd * 10) + 1     End If   End If   Next b Next i For c = 0 To 9 Label1(c).Caption = a(c) Next c End Sub バグの原因はなんとなくわかるのですがどうすればいいのか分かりません 素人ですいません。

専門家に質問してみよう