Excel 2003を使用しています。
Cell内に1360個の数字が並んでおり、それを1セルに1数字ずつ先頭から抽出し別のセルに振り分ける方法はありますか。区切り位置機能ではセル内に全ての数字が入りきらない為全て数字がセルに入りません。
LEFT、MIDコマンドでは文字列として扱われるためスペースが邪魔になる。
1セル内の内容
0 0 0 4 0 0 230 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 234 0 0 0......
↓こうしたい、
0 0 0 4 0 0 230
0 0 23 0 0 0 0
0 0 0 0 0 0 0
...........
よろしくお願いします。
No.9ベストアンサー
- 回答日時:
#08です。
仕様を変えました。データがあるセルを選択して実行すると、新しいシートを追加しそのシートにデータを書き込むようにしました。なお7行目末尾の数字を変更すれば1行あたりの列数を変更できます。Sub Macro5()
Dim cnt As Long, wkStr As String, ptr
Dim psw As Boolean
wkStr = ActiveCell.Value
Sheets.Add
Do While psw = False
wkStr = Application.Substitute(wkStr, " ", "@", 7)
ptr = Application.Find("@", wkStr & "@")
Cells(1, 1).Offset(cnt, 0).Value = Left(wkStr, ptr - 1)
cnt = cnt + 1
If ptr >= Len(wkStr) Then
psw = True
Else
wkStr = Right(wkStr, Len(wkStr) - ptr)
End If
Loop
Cells(1, 1).Resize(cnt, 1).TextToColumns Destination:=Cells(1, 1), _
DataType:=xlDelimited, Space:=True, Other:=False
End Sub
ご回答有難う御座いました。
私には難しいかと思いましたが丁寧に指導頂き目的通りの事ができました。大変助かりました。有難う御座いました。
No.8
- 回答日時:
解決済みとも思いましたがマクロを書いてみました。
2行目のデータのセルアドレスは書き換えてください。アクティブセルから下にバラしたデータを展開します。実行前にはブックを保存してくださいね。(なお区切り文字は半角の空白を想定しています。全角ならお手数ですが半角に置換してください)
Sub Macro5()
Const trgADRS As String = "A1" '←ここにデータのセルアドレスを記述
Dim cnt As Long, wkStr As String, ptr
Dim actCell As Range, psw As Boolean
Set actCell = Selection.Cells(1, 1)
wkStr = Range(trgADRS).Value
Do While psw = False
wkStr = Application.Substitute(wkStr, " ", "@", 7)
ptr = Application.Find("@", wkStr & "@")
actCell.Offset(cnt, 0).Value = Left(wkStr, ptr - 1)
cnt = cnt + 1
If ptr >= Len(wkStr) Then
psw = True
Else
wkStr = Right(wkStr, Len(wkStr) - ptr)
End If
Loop
actCell.Resize(cnt, 1).TextToColumns Destination:=actCell, _
DataType:=xlDelimited, Space:=True, Other:=False
End Sub
マクロはALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。実行はALT+F8を押して、マクロ名を選択します。
No.7
- 回答日時:
Excelの仕様で列数が256までなのでそれに引っかかるということですよね。
1360個の数字が一行だけでしたら、
1.そのEXCELシートをテキストファイルとして保存する
2.ノートパッド等で7つ目のスペースごとに改行してから保存しなおす
3.Excelでそのテキストファイルをインポートすれば早いでしょう。
1360個の数字が複数行あるのでしたら、VBS(Visual Basic Script)で、上の2の作業をするプログラムを作ると良いでしょう。
ご回答有難う御座いました。
データが1360個になり桁数もまばらで間違いを起こしやすい為
ノートパッドで見直し後の編集をするのはやめました。
有難うございました。
No.6
- 回答日時:
あ、、補足します。
クリップボードにタブ区切りで転送してるので、もし試すなら
[データ]-[区切り位置] でタブにチェックを入れておかないと
ペーストしたとき、分割されません。
No.5
- 回答日時:
こんにちは。
KenKen_SP です。VB による方法です。
標準モジュールに下記を貼り付け、Microsoft Forms 2.0 Object Library を
参照設定して下さい。
ご質問文では 7個になってましたが 1360/7 で 195 行にもなってしまいます
ので、16個区切りにしてます。コード内の COL_COUNT で変更できます。
なお、セルに分割した最後に 余計な 0 があるけど、何だか今日は頭が良く
回らなくてデバッグしてません...が、まぁ特に問題は無いと思います。
どんな出力方法が良いかなと考えたのですが、良い方法が思いつかなかった
ので結果をクリップボードに入れて、転記作業はユーザーにまかせる仕様に
しました。
Public Sub SampleProc()
' Microsoft Forms 2.0 Object Library の参照が必要です
' Visual Basic Editorのメニューから[ツール]-[参照設定]を選択し
' [参照設定]ダイアログボックスから
' 区切りをここで指定(現在16個区切り)
Const COL_COUNT = 16
Dim CPB As DataObject
Dim vBuf As Variant
Dim vDat As Variant
Dim sRet As String
Dim j As Long
vBuf = Split(ActiveCell.Value, " ")
j = 1
ReDim vTmp(1 To COL_COUNT)
For Each vDat In vBuf
vDat = Val(Trim$(vDat))
If Len(vDat) > 0 Then
If j > COL_COUNT Then
sRet = sRet & Join$(vTmp, vbTab) & vbCrLf
ReDim vTmp(1 To COL_COUNT)
j = 1
End If
vTmp(j) = vDat
j = j + 1
End If
Next
sRet = sRet & Join$(vTmp, vbTab)
If sRet <> "" Then
Set CPB = New DataObject
CPB.Clear
CPB.SetText sRet
CPB.PutInClipboard
Set CPB = Nothing
MsgBox "クリップボードにコピーしました(´・ω・`)", vbInformation
End If
End Sub
No.4
- 回答日時:
ANo.3です。
> →プレビュー画面で全列を選択(左端の列を選択し、Shiftを押しながら右端の列をクリックすると全選択できます)&列のデータ形式は[G/標準]にチェック
に関して補足です。このダイアログの[表示先]についてです。
0 0 0 4 0 0 230 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 234 0 0 0......
が[A1]セルにある場合、表示先には[$A$1]が入っていると思いますが、例えばこれを[$A$2]または[A2]に変えれば
[A1]の内容はそのままで [A2][B2][C2]・・・に分割された値が表示されるようになります。
[$A$1]のままにしておくと、区切る前の長いデータは上書きされてしまいますのでご留意ください。
No.3
- 回答日時:
ANo.2の回答と似ていますが、別に一度テキストに保存する必要はありません。
現状のまま、データが入っているセルを選択して、メニューバーから[データ]-[区切り位置]をクリックしてください。
そして、[カンマやタブなどの区切り位置によってフィールドごとに区切られたデータ]にチェック
→区切り文字は[スペース]のみにチェック
→プレビュー画面で全列を選択(左端の列を選択し、Shiftを押しながら右端の列をクリックすると全選択できます)&列のデータ形式は[G/標準]にチェック
→完了
※ 列のデータ形式は[文字列]を選択すれば文字列形式にもなります。
No.2
- 回答日時:
>0 0 0 4 0 0 230 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 234 0 0 0......
中身を一度、テキストファイルに保存して、
エクセルで[ファイル]→[開く]→ファイル形式を[テキストファイル]にして、
テキストファイルウィザード1/3で
[元のデータの形式]を[カンマやタブなどの区切り文字によって・・・]の方にチェック→[次へ]
2/3で、
[区切り文字]の[スペース]にチェック→[次へ]
3/3で、
[データのプレビュー]で全範囲選択して
[列のデータ形式]を[G/標準]に。
[完了]
これでどうですか?
No.1
- 回答日時:
まず7つずつに分けてみては?
A1="0 0 0 4 0 0 230 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 234 0 0 0......"
A2=MID($A$1,1,FIND(",",SUBSTITUTE($A$1," ",",",(ROW()-1)*7)))
A3=MID($A$1,FIND(",",SUBSTITUTE($A$1," ",",",(ROW()-2)*7)),FIND(",",SUBSTITUTE($A$1," ",",",(ROW()-1)*7)))
でA3を下方にコピー
分割できたら、コピーして値として貼り付けして、区切り位置でスペースで分割
ご回答有難う御座いました。早速やってみましたが区切り位置でスペース分割するとセルの数の制限により一部が表示できなくなりました。
有難う御座いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Excel(エクセル) Excelの文字列を数字に変換する方法について 6 2023/07/31 21:18
- Visual Basic(VBA) 先頭と末尾を指定して連続した数字を入力 1 2022/09/14 13:12
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) エクセルで#以降の文字を取得したい 1 2022/03/28 13:14
- Visual Basic(VBA) A列にある値をB列・C列にVBAで切り出し 3 2022/04/09 19:20
- Excel(エクセル) Excelにて、セルに入力してある文字の中から文字と最後の数字のみ切り取り貼り付けるVBA 5 2022/12/27 08:40
- Excel(エクセル) エクセル 3つの値の中からデータを抽出させる方法 4 2023/08/24 11:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別シートからの文字を変更
-
エクセルの行の抽出について質...
-
Excel 2019 のピボットテーブル...
-
Excelのセルを飛ばして入力する
-
【マクロ】エクセルにかいてあ...
-
Excelのオートフィル
-
Excel初心者です。 詳しい方、...
-
スプレッドシート クエリ関数 1...
-
MOS365 Excel Expert / Excel R...
-
西暦や和暦の表示をyyyymmdd表...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセルの数式で教えてください。
-
スプレッドシートの関数VLOOKUP...
-
エクセルでセルに「氏名を入力...
-
エクセルで指定した日付、店舗...
-
【Excel】セル内の時間帯が特定...
-
Excelのグラフ軸について
-
Excel 2019 は、SPILL機能があ...
-
関数を教えて下さい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内にある数字の出現回...
-
Excel関数の先頭に「@」が入っ...
-
エクセルの気味悪い不思議
-
Excel VBAで、実行時にsheet上...
-
表示されている人数だけを数え...
-
他人が作ったマクロの理解
-
Excelの関数について質問です。
-
Excel 集計表
-
エクセル 日時の計算式について
-
Excelの関数に関して質問です。...
-
エクセル:セル内の文字列の下...
-
絞り込み検索
-
エクセルの関数で
-
エクセルの書式設定について教...
-
余分なEXCELファイルに印刷され...
-
VBA 同一シート内での転記の仕方
-
長期休みの関数はありますか
-
Excelの空のセル
-
エクセルで入力してある文を別...
-
Excelのマクロで、セルを結合し...
おすすめ情報