- ベストアンサー
結合のループ処理のマクロについて
- 質問者は結合のループ処理のマクロを作成していますが、うまく機能していないようです。
- マクロは、Sheet1のC列にデータがある場合、C列からF列までのデータをSheet2のC列に半角で結合するものです。
- しかし、結合するときにエラーが発生しています。質問者はどこが問題か教えてほしいと思っています。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
既に、すばらしい回答が出ていますが、質問者の勉強という事で捕捉します。 Sheet1!C7.Value & Sheet1!D7.Value & Sheet1!E7.Value & Sheet1!F7.Value 関数の記述の仕方です。VBAのコードではありませんよ。 activesell.Offset(0.1).Select スペルミス、点とカンマ、行と列の指定の間違い Activeなセルを一行ずつ下へずらすには ActiveCell.Offset(1, 0).Activate と記述します。 Do while を使ったLoopですが、出来るだけ今のコードを生かすとして Sub loop1() Dim i As Integer i = 7 Sheets("Sheet1").Range("c7").Select Do While ActiveCell.Value <> "" Worksheets("Sheet2").Range("c" & i).Value = Range("c" & i).Value i = i + 1 ActiveCell.Offset(1, 0).Activate Loop End Sub となります、セルの結合と半角への変換は無視しています。 まずは、これだけで、何を行っているかいるか理解してみてください。
その他の回答 (4)
- WindFaller
- ベストアンサー率57% (465/803)
こんにちは。 ご質問のコードを見る限りは、まだ掲示板で質問する段階にはないように思います。 まず、VBEditor に書いてみて、赤い字が出た所を修正するようにしなければなりませんね。また、デバッグ--コンパイルをしたら、エラーが出ていないとか確認してください。 できるだけ、基本的な所を積み上げたほうがよいです。今の段階では、回答を貰っても、解説のないコードだけでは、全部は把握できないかもしれません。 '// Sub CombineData() Dim ws2 As Worksheet Dim LastRow As Long '最後の行 Dim i As Long Dim v As Variant Set ws2 = Worksheets("Sheet2") With Worksheets("Sheet1") LastRow = .Cells(Rows.Count, "C").End(xlUp).Row For i = 7 To LastRow '7行目から If .Cells(i, "C").Value <> "" Then v = .Cells(i, "C").Value _ & .Cells(i, "D").Value _ & .Cells(i, "E").Value _ & .Cells(i, "F").Value ws2.Cells(i, "C").Value = StrConv(v, vbNarrow) '半角 End If Next i End With Set ws2 = Nothing End Sub
お礼
ありがとうございます
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
最後で間違った、、、ENDの直前、、、 (正) zSheet.Columns("C").AutoFit (誤) 省略
お礼
ありがとうございます
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
C列途中に空白がある場合、その行はスキップしている。Sheet1とSheet2の行位置は対応させているので、Sheet2の方を詰める場合は、nn = i、をコメントにする 最初にC列をクリアしている。問題があれば、zSheet.Columns("C").Clear、をコメントにする Option Explicit 'Sub loop1() Sub TheNextNew() Const xNum = 7 Dim i As Long Dim nn As Long Dim xLast As Long Dim xSheet As Worksheet Dim zSheet As Worksheet 'i = 1 'Sheets("Sheet1").Select Set xSheet = ThisWorkbook.Sheets("Sheet1") Set zSheet = ThisWorkbook.Sheets("Sheet2") zSheet.Columns("C").Clear xLast = xSheet.Cells(Rows.Count, "C").End(xlUp).Row 'xSheet.Range(Cells(7, "C"), Cells(xLast, "C")).Select 'Do While ActiveCell.Value <> "" nn = xNum For i = xNum To xLast 'Worksheets("Sheet2").Select 'Range("c7").Select 'Range("c7").Value = Asc.Sheet1!C7.Value & Sheet1!D7.Value & Sheet1!E7.Value & Sheet1!F7.Value If (xSheet.Cells(i, "C").Value <> Empty) Then nn = i zSheet.Cells(nn, "C").Value = StrConv(xSheet.Range("C" & i).Value & xSheet.Range("D" & i).Value & xSheet.Range("E" & i).Value & xSheet.Range("F" & i).Value, vbNarrow) nn = nn + 1 End If 'i = i + 1 'ActiveCell.Offset(0.1).Select 'Loop Next zSheet.Select zSheet.Rows(xNum).AutoFit End Sub
お礼
ありがとうございます。 大変勉強になりました。
- keithin
- ベストアンサー率66% (5278/7941)
>どこが悪い シート名、セル番地のマクロの書き方が全然デタラメです。 作成例: sub macro1() dim r as long dim c as long for r = 7 to worksheets("Sheet1").range("C6556").end(xlup).row worksheets("Sheet2").cells(r, "C").clearcontents if worksheets("Sheet1").cells(r, "C") <> "" then for c = 3 to 6 worksheets("Sheet2").cells(r, "C") = worksheets("Sheet2").cells(r, "C") & worksheets("Sheet1").cells(r, c) next c end if next r end sub
お礼
詳しい解答ありがとうございます
お礼
親切なご指導ありがとうございます。