[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オブジェクトが必要です』(Ali)
Sub RowInsert()
Dim myCol As integer Dim myRow As Integer If Worksheet.Cells(myRow, myCol) <> Worksheet.Cells(myRow, myCol - 1) Then
データは1列目が同じ文字列(例えば34-5587のようなもの)で、 2列目は降り順でソートされた正の整数です。
これを用いて2列目の値が変わるごとに行挿入し、平均などを出力しようと思っています が、上記のIf Worksheet.Cells(myRow, myCol) <>.....の部分で「オブジェクトが必要で す」が現れてしまいます。理由と対処方法をご教授くだされば幸甚に存じます。
Worksheet("Sheet1").Cells(myRow, .... ^^^^^^^ の部分が抜けています。
Dim myCol As integer Dim myRow As Integer
myRow は Long 型にしておいた方がよいと思います。 (seiya)
こんにちは。かみちゃん です。
seiyaさんからすでに書き込みがありますが、書きかけていたので、そのままアップさせていただきます。
> データは1列目が同じ文字列
そのデータは、どこのシートにあるのですか? Worksheet.Cells(〜 の部分を アクティブシートなら、 ActiveSheet.Cells(〜 特定のシートなら、 WorkSheets("Sheet1").Cells(〜
また、複数のブックを開いているならば、 WorkBooks("Book1.xls").WorkSheets("Sheet1").Cells(〜 などとします。
(かみちゃん) 2009-01-12 16:53
今度はWorksheet("Sheet1")部分で
コンパイルエラー SubまたはFunctionが定義されていません。 と出てしまいます。
また、ActiveSheetの場合は、アプリケーション定義、または......
が出てしまいました。
こんにちは。かみちゃん です。
> 今度はWorksheet("Sheet1")部分で > > コンパイルエラー > SubまたはFunctionが定義されていません。 > と出てしまいます。
seiyaさんから訂正があると思いますが、
>> Worksheet("Sheet1").Cells(myRow, .... >> ^^^^^^^ >> の部分が抜けています。
は、Worksheets("Sheet1") ^^^ と、"s"が抜けていると思います。
> ActiveSheetの場合は、アプリケーション定義、または...... が出てしまいました。
まずは、 MsgBox ActiveSheet.Cells(1, 2).Address という記述を試してみてください。
そうすると、myRow と myCol の値が何になっているかというのが問題です。
MsgBox "myRowの値は " & myRow & vbCrLf & "myCol値は " & myCol If ActiveSheet.Cells(myRow, myCol).Value <> 〜
というようにして、変数の値を確認してみてください。
(かみちゃん) 2009-01-12 17:24
MsgBox ActiveSheet.Cells(1, 2).Addressは$B$1と返ってきました。
MsgBox ("myRowの値は " & myRow & vbCrLf & "myCol値は " & myCol)は myRowの値は0 myColの値は0と返ってきました。
申し遅れましたが、表の先頭行はフィールド名です。
こんにちは。かみちゃん です。
> myRowの値は0 myColの値は0と返ってきました。
そうでしょうね。
とりあえず、 myRow = 2 '2行目からチェック myCol = 2 '2列目と1列目からチェック If ActiveSheet.Cells(myRow, myCol).Value <> 〜 としてみてはいかがですか?
(かみちゃん) 2009-01-12 18:09
とりあえず、コードの一部ではなく 全体を載せておいてもらうのが 良いのではないでしょうか。
行の挿入・削除は 下から行うのが定石です。 過去ログにもたくさんありますので 探してみられても良いかもしれませんね。
(HANA)
こんにちは。かみちゃん です。
> 2列目の値が変わるごとに
であれば、 If Worksheets("Sheet1").Cells(myRow, myCol) <> Worksheets("Sheet1").Cells(myRow, myCol - 1) Then ではなく、 If Worksheets("Sheet1").Cells(myRow, myCol).Value <> Worksheets("Sheet1").Cells(myRow - 1, myCol).Value Then とするべきではないでしょうか?
行と列が説明とコードが合っていないように感じます。
なお、 myRow = 3 myCol = 2 If Worksheets("Sheet1").Cells(〜 というような感じにします。
挿入に関しては、HANAさんの意見「下から行なうのが定石」に賛成です。
(かみちゃん) 2009-01-12 18:36
Aliさん
HANAさんと同意見で、やりたいことを説明してください。 他の方法で簡単にできそうな気がします。 (seiya)
やりたいことを説明してください。
ありがとうございます。はじめに書いたものではいけませんか?
データは1列目が同じ文字列(例えば34-5587のようなもの)で、 2列目は降り順でソートされた正の整数です。 これを用いて2列目の値が変わるごとに行挿入し、平均などを出力しようと思っています
こんにちは。かみちゃん です。
> はじめに書いたものではいけませんか?
Sub RowInsert()
End Sub の中身をすべて提示してみませんか?
なお、
> myRow = 3 '2行目からチェック > myCol = 2 '2列目と1列目からチェック > If ActiveSheet.Cells(myRow, myCol).Value <> 〜
という私の提案は、試していただけていないのでしょうか?
とりあえず、
> ActiveSheetの場合は、アプリケーション定義、または...... が出てしまいました。
の対処策を説明させていただいたわけですが。
(かみちゃん) 2009-01-12 20:13
こんにちは。かみちゃん です。
> これを用いて2列目の値が変わるごとに行挿入
本当は、今Aliさんができているコードを見せていただくのが、早いのですが、 行挿入の部分だけ考えると、以下のような感じでできると思います。
10行目から上方向にチェックしています。
Sub Sample1() Dim myCol As Integer Dim myRow As Long
myCol = 2 For myRow = 10 To 3 Step -1 If Worksheets("Sheet1").Cells(myRow, myCol).Value <> Worksheets("Sheet1").Cells(myRow - 1, myCol).Value Then Worksheets("Sheet1").Rows(myRow).Insert End If Next End Sub
↑のコードは、↓のように書くこともできます。
Sub Sample2() Dim myCol As Integer Dim myRow As Long
myCol = 2 For myRow = 10 To 3 Step -1 With Worksheets("Sheet1").Cells(myRow, myCol) If .Value <> .Offset(-1).Value Then .EntireRow.Insert End If End With Next End Sub
(かみちゃん) 2009-01-12 20:35
>本当は、今Aliさんができているコードを見せていただくのが、早いのですが、
Sub RowInsert()
Dim myCol As integer
Dim myRow As Integer
If Worksheet.Cells(myRow, myCol) <> Worksheet.Cells(myRow, myCol - 1) Then Msgbox("How are you ?") end if
私が書いたものは実質上の通りだけで、その導入部でこけたので。
詳しいデータ配列があれば、ピボットテーブル/小計(SubTotal)等の機能でできると思いますが? (seiya)
ちなみに、ループしない方法で
Columns("a").Insert With Range("b2", Range("b" & Rows.Count).End(xlUp)).Offset(, -1) .Formula = "=if(b1<>b2,1,"""")" On Error Resume Next .SpecialCells(-4123, 1).EntireRow.Insert On Error GoTo 0 End With Columns("a").Delete
(seiya)
↓のコメントを作成中判明したので。。。。 [[20090118153111]]『RangeのネストとWorksheetfunction.Average』(Ali)
一番最後のseiyaさんのコードは、3行目を .Formula = "=if(c1<>c2,1,"""")" としておくのがよさそうに思います。
(HANA)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.