プロが教えるわが家の防犯対策術!

1行に文字数不定(3159~81文字)で270行ほどデータがプロットされています。

カンマを区切り文字にして区切りたいのですが、Excelの仕様の列数をオーバーしてしまうので一行のデータを固定した数で切り取って、別なシートに貼り付けて横方向の長さを削減したデータの形に持っていきたいと思っています。

固定長の文字列だけ切り取り→別シートに貼り付け→また切り取り→別シートの次の行に貼り付けというしょりを繰り返したいのですが肝心の切り取りの部分のコードでエラーが出てしまいます。

Dim Cutter As String
中略
sheet1.cells(1,1).Len(Cutter,81).Cut
中略
End Sub

エラーの内容を見る限り、Len関数がCutメソッドをサポートしていないということらしいのですが、決まった文字数だけ切り取るには他に表現できないものでしょうか?

A 回答 (2件)

こんにちは。



本来、一行の文字をカンマ区切りというと、どうも、古いデータベースのデータではないかと思うのです。シーケンシャルファイルですと、以下のようなコードではありません。ただ、それは明らかにされていませんから、Excelの標準的なSplit 関数(Excel 2000以降)を用いています。

'-------------------------------------------

Sub SplitTest1()
  Dim Ar As Variant
  Dim Ar2() As Variant
  Dim i As Long
  Dim j As Long
  Dim n As Integer
  Dim k As Integer
  Const iCOL As Integer = 10 '列数
  Ar = Range("A1").Value '対象セル
  
  If Len(Ar) = 0 Then Exit Sub
  Ar = Split(Ar, ",") 'カンマ区切り
  n = Int(UBound(Ar) / iCOL) + Abs(CInt((UBound(Ar) Mod iCOL) > 0))
  ReDim Ar2(n, iCOL - 1)
  For i = LBound(Ar) To UBound(Ar)
    Ar2(k, j) = Ar(i)
    If i Mod iCOL = iCOL - 1 Then
      k = k + 1
      j = -1
    End If
    j = j + 1
  Next i
  '貼り付け先
  Worksheets("Sheet2").Range("A1").Resize(n, iCOL).Value = Ar2()
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。

区切り処理=列数オーバー→まずは1列に変換しよう

という頭しかなくなってしまって、配列処理することまで考えていませんでした(^^;)

お礼日時:2009/04/21 15:45

Len関数は、通常 Len(string) で用いられstringの文字数(長さ)を返します。



文字を切り取る場合は、左からなら Left(string, length) で指定文字数(length)分の文字列が返されます。
その他にも Right()やMid() などがあります。

さて、ご質問文ですと、データは「,」区切りで解釈できるようですので…
 Split(string, ",")
を利用すれば、「,」で区切られた1次元配列が返されますので、そちらを利用したほうが便利かもしれませんね。
    • good
    • 0
この回答へのお礼

No1さんのところでも書きましたが、配列処理を考慮すればよかったのですね。

急ぎのデータ処理だったため焦って頭から抜けていました。

お手数おかけしました。

お礼日時:2009/04/21 15:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!