Excelで同一セル内に入力されているデータを他のセルに分割したい
- Excelで同一セル内に入力されているデータを他のセルに分割する方法について質問しました。
- エクセルで同一セル内に、複数のデータが入力されている状況についてデータを分割する方法を教えてほしいです。
- 質問者は、エクセルの特定のセルに複数行のデータが入力されている状況で、それらのデータを他のセルに分割して入力したいという問題を抱えています。マクロの回答を参考にしながら、特定のセルに入力されたデータを挿入し、分割して入力する方法を知りたいようです。
- ベストアンサー
Excelで同一セル内に入力されているデータを他のセルに分割したい
http://okwave.jp/qa4369634.html?ans_count_asc=20 で質問をして、何度かやりとりをさせていただいて エクセルで同一セル内に、セル内改行で1~6列ほどのデータが入力されています。 縦にデータが入力されていて、それぞれのセルにセル内改行を含み、データが入力されています。 それぞれのセル内のデータを… 例えば、A1セル内に5行入力されていたら、A2セルから入力されている行数分(ここでいうと5行)挿入し、それぞれにデータを分割して入力させたい。 かつ、B・Cセルは増えたセルにそれぞれのデータをコピーしたいと言ったら、 Sub Macro1() Dim idx, cnt As Integer Dim wkStr() As String Dim rng As Range ActiveSheet.Copy after:=ActiveSheet For idx = Range("A65536").End(xlUp).Row To 1 Step -1 If InStr(Cells(idx, "A"), Chr(10)) > 0 Then wkStr = Split(Cells(idx, "A").Value, Chr(10)) Set rng = Cells(idx, "B") For cnt = UBound(wkStr) To 0 Step -1 Cells(idx, "A").Value = wkStr(cnt) Cells(idx, "B").Value = rng.Value Cells(idx, "C").Value = rng.Offset(0, 1).Value If cnt > 0 Then Cells(idx, "A").Resize(1, 3).Insert shift:=xlDown End If Next cnt End If Next idx End Sub といったマクロのご回答をいただきました。 これを元に、 ・データが入っているセルをA列→B列に変更 ・A列のデータはセルが増えた分だけ増やしたい ・A1に対応するデータがC1・D1に入っていた場合、対応するデータは残したまま、B列が増えただけ、列を増やしたい と変更したいのですが…。 すいませんが、宜しくお願い致します。
- poyo17
- お礼率33% (21/62)
- オフィス系ソフト
- 回答数1
- ありがとう数2
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
これでどうでしょう。 でも >・A1に対応するデータがC1・D1に入っていた場合、対応するデータは残したまま、B列が増えただけ、列を増やしたい はよく理解できまていません。とりあえず空白セルを挿入するようにしました Sub Macro3() Dim idx, cnt As Integer Dim wkStr() As String Dim wk ActiveSheet.Copy after:=ActiveSheet For idx = Range("B65536").End(xlUp).Row To 1 Step -1 If InStr(Cells(idx, "B"), Chr(10)) > 0 Then wkStr = Split(Cells(idx, "B").Value, Chr(10)) wk = Cells(idx, "A").Value For cnt = UBound(wkStr) To 0 Step -1 Cells(idx, "A").Value = wk Cells(idx, "B").Value = wkStr(cnt) If cnt > 0 Then Cells(idx, "A").Resize(1, 2).Insert shift:=xlDown End If Next cnt Cells(idx + 1, "C").Resize(UBound(wkStr), 2).Insert shift:=xlDown End If Next idx End Sub
関連するQ&A
- VBAエクセル空白セル0の入力
C列が空白となるまで、F列・・・L列の空白セルに0を代入する。 という処理を行いたく以下コードで実行をして ファイル種類をCSVにて、保存した後名前の変更で拡張子をTXTにすると データ入力された列の以降がカンマの羅列が「,,,,,,,,(改行)」の繰り返しで表示されてしまいます。 (CSV保存の後、視覚的に空白部分を行選択して削除するとなくなります。) どうすれば、このカンマが表示されなくなるでしょうか。 うまく説明できてないですが、アドバイス御願いします。 Dim i As Long i = 3 Do Until Cells(i, 3).Value = "" If Cells(i, 6).Value = "" Then Cells(i, 6).Value = "0" End If If Cells(i, 7).Value = "" Then Cells(i, 7).Value = "0" End If If Cells(i, 8).Value = "" Then Cells(i, 8).Value = "0" End If If Cells(i, 9).Value = "" Then Cells(i, 9).Value = "0" End If If Cells(i, 10).Value = "" Then Cells(i, 10).Value = "0" End If If Cells(i, 11).Value = "" Then Cells(i, 11).Value = "0" End If If Cells(i, 12).Value = "" Then Cells(i, 12).Value = "0" End If i = i + 1 Loop
- 締切済み
- Visual Basic
- エクセル 2010 マクロ 検索
http://okwave.jp/qa/q8562170.html 上記質問に追加です。 ※1 'D,E,F,G,H,I,K を検索してD,E,F,G,H,I に検索対象があった時 E,F,G,H,Iのいずれかだったら左横列の上に向かって (EならD 、FならE ・・・という具合に) 何か入力されているセルのM列の191000####をmsgboxで表示させたいです。 (画 F11セル(A-1)が検索ヒットした場合E9セル(R-01)を辿り、 その行のM列のセル(191000####)をmsgboxで表示 ※2 但し、検索結果がD列のデータだった時、その行のM列が191000####だった場合 M列の191000####をmsgboxで表示させたいです。 (画 D25セル(Y-1)対象の時) ※3 また、検索結果がD列のデータだった時、その行のM列が191000####以外だった場合 (空白だったり191000####以外の場合) M列の一番上の191000####をmsgboxで 191000####&「これは例外です」と表示させたいです。 (画 D24セル (X-1)対象の時) 現在のコードは下記のとおりです。 Sheet1に Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address <> "$A$3" Then Exit Sub Call 検索 Range("A1:A2").Clear Range("A1").Activate End Sub 標準モジュールに Sub 検索() Dim Ws1 As Worksheet, Ws2 As Worksheet Dim strKey As Variant Dim s As String Dim c As Range, bln As Boolean Dim rng1 As Range Dim cnt As Long Set Ws1 = Sheet1 Set Ws2 = Sheet2 Ws1.Select With Ws2 strKey = Application.Transpose(.Range("A1").Resize(2).Value) strKey = Join(strKey, "") End With If Trim(strKey) = "" Then MsgBox "検索キーが空です", vbCritical: Exit Sub With Ws1 Set rng1 = .Range("K2", .Cells(Rows.Count, "K").End(xlUp)) For Each c In rng1.Offset(, -10) 'D,E,F,G,H,I,Kを検索 s = c.Offset(0, 3).Value & c.Offset(0, 4).Value & c.Offset(0, 5).Value & c.Offset(0, 6).Value & c.Offset(0, 7).Value & c.Offset(0, 8).Value & c.Offset(0, 10).Value & If StrComp(s, strKey, vbTextCompare) = 0 And c.Offset(0, 2).Value = "" Then c.End(xlToRight).Activate c.Offset(0, 2).Value = Date c.Resize(1, 14).Interior.ColorIndex = 6 bln = True Exit For End If Next c If Not bln Then Ws2.Select MsgBox "リストに存在しません", vbExclamation, "NotFound" Else '加える Call ReSearch(Ws1.Range("M2"), c.Row) '再設定 Set rng1 = .Range("K6", .Cells(Rows.Count, "K").End(xlUp)) MsgBox "残り" & DoubleCountBlank(rng1.Offset(, -8), rng1) & "品目です。", vbInformation End If End With Application.Goto Ws2.Range("A1"), True End Sub Sub ReSearch(Rng As Range, j As Long) '最初のセル, 終わりの行数 Dim i As Long Dim Ws As Worksheet With Rng.Parent For i = j To Rng.Row Step -1 If CStr(.Cells(i, Rng.Column).Value) Like "191000####" Then MsgBox "指図番号 " & vbCrLf & CStr(.Cells(i, Rng.Column).Value) & " の部品です" Exit For End If Next i End With End Sub Function DoubleCountBlank(rng1 As Range, rng2 As Range) '横並びのセルのブランクをカウントする (セル範囲1 , セル範囲2) Dim i As Long Dim cnt As Long For i = 1 To rng1.Rows.Count If VarType(rng2.Cells(i, 1)) = vbDouble Then If rng1.Cells(i, 1).Value = "" And rng2.Cells(i, 1).Value <> 0 Then cnt = cnt + 1 End If End If Next i DoubleCountBlank = cnt End Function 宜しくお願い致します。
- ベストアンサー
- Excel(エクセル)
- excelのファイルとセル値を書き出したい
excel2003を利用しています。 とあるフォルダにある excelファイル名(自分自身のファイルを除く) を全て書き出して、 且つ A1セルの値をB列に書き出すことを、やろうとvbaを作ってみましたが。 最後のファイルのA1セルを書きだすところで、エラーになっていまい そこだけ空白になってしまいます。※写真参照 記述は以下の通りです。どのように修正すればよいか 教えていただけないでしょうか? また他にもっと優れた記述があれば、そちらも教えて欲しいです。 よろしくお願いします。 Sub test() Dim buf As String, cnt As Long Dim Path As String Path = ThisWorkbook.Path & "\" buf = Dir(Path & "*.xls") cnt = 2 Do While buf <> "" If buf <> ThisWorkbook.Name Then cnt = cnt + 1 Cells(cnt, 1) = buf buf = Dir() Workbooks.Open Filename:=Path & "\" & buf MsgBox Workbooks(buf).Worksheets(1).Range("A1").Value Cells(cnt, 2) = Workbooks(buf).Worksheets(1).Range("A1").Value Workbooks(buf).Close End If Loop End Sub
- 締切済み
- Excel(エクセル)
- VBA? 色のついた文字のセルを数えたい
色のついた文字の記載があるセルをカウントしたく 色々調べました。結局VBAで設定する方法にしたのですが 設定しテストをするとどうしてもカウント数が合いません。 全くの初心者の為何が間違っているのか全く分かりません。 どなたか教えて下さい。 VBAも全く知らない者でしたので 調べて以下のものをそのまま貼り付けました。 Function CCount(Rng As Range, idx) Dim R As Range Dim Cnt As Long Application.Volatile For Each R In Rng If R.Font.ColorIndex = idx Then Cnt = Cnt + 1 Next R CCount = Cnt End Function Function GetIndx(Rng As Range) If Rng.Count > 1 Then GetIndx = vbNullString Exit Function End If GetIndx = Rng.Font.ColorIndex End Function 何が間違っているのでしょうか?
- ベストアンサー
- オフィス系ソフト
- Excel マクロのFor~Nextで再起動エラー
勤務表を作っています。 下記の’OKまでは希望どうりうまく出来ていたのですが、勤務表の下セルに各列の人員(行)10名分位A,B,Cの計を表示させたい。実行するとエラー「Microsoft office Excel 再起動」を求められます。 for~が判断指令が<重い>のでしょうか。なんとか回避さする方法を教えてください。 Win XP Sp2 Office Excel 2007です。今回これを作るにあたり初VBA使用者です。 ' C入力後の翌日は休をセット。CC連続は休休セット。 Private Sub Worksheet_Change(ByVal Target As Range) Dim cnt As Variant Dim a1 As Byte Dim b1 As Byte Dim c1 As Byte Dim nin As Variant Dim retsu As Variant If Target.Count > 1 Then Exit Sub '複数セルの入力は無視 'A If Target.Value = "A" Or Target.Value = "A" Then Target.Value = "A" Range("AV16").Value = Target.Column End If 'B If Target.Value = "B" Or Target.Value = "B" Then Target.Value = "B" Range("AV16").Value = Target.Column End If 'C If Target.Value = "C" Or Target.Value = "C" Then Range("AV16").Value = Target.Column Target.Value = "C" Else End If ' If Target.Value = "C" Then If Target.Offset(0, -1).Value = "C" Then 'Cが連続したら Target.Offset(0, 1).Resize(1, 2).Value = ("休") '連休に Else End If Target.Offset(0, 1).Value = ("休") 'そうでなければ休 End If 'A,B,C の数をカウントする。 nin = Range("AV15") '別のプログラムから入力した人員数 retsu = Range("AV16") ' A,B,Cのいずれかを入力したセル列。Target.Column ’OK For cnt = 7 To (6 + nin) If cells(cnt, retsu) = "A" Then a1 = a1 + 1 End If If cells(cnt, retsu) = "B" Then b1 = b1 + 1 End If If cells(cnt, retsu) = "C" Then c1 = c1 + 1 End If Next cnt cells(nin + 7, retsu) = a1 'A番 cells(nin + 8, retsu) = b1 'B番 cells(nin + 9, retsu) = c1 'C番 End Sub
- ベストアンサー
- Windows XP
- Excel 改ページのマクロ
同シート内で改ページを設定するマクロを、ここで教えてもらったのですが、改ページを判断するデータの列が関数(vlookup)で持ってきたデータの場合にうまく機能しません。下のマクロに手を加えれば可能でしょうか? Sub Macro4() Const col As String = "A" '改ページを判断するデータの列名 Dim idx As Long Dim sv sv = Cells(1, col).Value For idx = 1 To Cells(65536, col).End(xlUp).Row If Cells(idx, col).Value <> sv Then ActiveSheet.HPageBreaks.Add Before:=Rows(idx) sv = Cells(idx, col).Value End If Next idx End Sub
- ベストアンサー
- オフィス系ソフト
- データの入力規制
以前教えていただきました。データの入力規制ですが、変更があったため、再度 教えていただけますでしょうか? sheet2のB列にデータの入力規制のセルを設け、そこに頭文字をいれると、sheet1のリストの中から その頭文字とマッチしたリストを表示させるものを作りたいと考えています。 前回はsheet2のA列に候補のリストがありましたが、今回はsheet1のB列にリストがあります。 また、前回はsheet1のA列にリスト設定していましたが、今回はsheet2のB列に変更したいとおもってます。 また、前回はsheet1のC列にマッチした候補が表示していましたが、 sheet1のAK列までデータが入っており、使えなくなっております。 前回教えていただいたコードが Sub リスト() 'この行から Dim i As Long, cnt As Long, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("Sheet1") '←Sheet1は実際のSheet名に! Set wS2 = Worksheets("Sheet2") '←Sheet2も実際のSheet名に! i = wS2.Cells(Rows.Count, "C").End(xlUp).Row Application.ScreenUpdating = False If i > 1 Then Range(wS2.Cells(2, "C"), wS2.Cells(i, "C")).ClearContents End If cnt = 1 If Selection.Column = 1 And Selection.Count = 1 Then For i = 2 To wS2.Cells(Rows.Count, "A").End(xlUp).Row If wS2.Cells(i, "A") Like Selection & "*" Then cnt = cnt + 1 wS2.Cells(cnt, "C") = wS2.Cells(i, "A") End If Next i Application.ScreenUpdating = True End If End Sub 'この行まで になります。 追伸、今朝、お答えいただいた方、申し訳ございません。 画像を他のページから貼ってしまったため、削除されてしまいました。 ですので、再度質問させていただきます。
- ベストアンサー
- オフィス系ソフト
- エクセル:2列以上ランダムに入れ替えるには
エクセルのA列に担当者名を入力していまして、別のシートには○と×を担当者分数に合う様に入力しています。 ○は担当者選出数だけあります。 別々のシートに、下記のマクロを組んでボタンを押したら、ランダムに入れ替わるものにしています。 これを一つのシートで、担当者名をA列、○と×をB列にして、同時にランダム入れ替わる様に色々とやってみましたが、A列のみだけが入れ替わります。 同時に入れ替わる事は不可能でしょうか? ご教授お願いします。 宜しくお願いします。 下記は、A列のみが入れ替わります。 Private Sub 更新_Click() ' Dim line_cnt As Long Dim i As Long Dim swap_area As Variant Dim swap_row As Long Randomize Sheets(1).Select line_cnt = Range("A65536").End(xlUp).Row For i = 1 To line_cnt swap_row = Int(Rnd * line_cnt + 1) If swap_row <> i Then swap_area = Cells(i, 1).Value Cells(i, 1).Value = Cells(swap_row, 1).Value Cells(swap_row, 1).Value = swap_area End If Next ' End Sub 下記の ,"B65536"を追加して、動作するかと思いましたが、B列は動作しませんでした。 line_cnt = Range("A65536","B65536").End(xlUp).Row
- ベストアンサー
- オフィス系ソフト
- セルにデータが入っていないのを見つけるには?
ユーザフォームにあるコマンドボタンを押すと、Sheet1のセル"D4"から横方向→にセルの中にデータが入っていない所までループし、データが入っていないセルがあったら"END"が入力され終了したいのですが。。 Private Sub CommandButton5_Click() Dim u As Integer u = 4 Do Until Worksheets("Sheet1").Cells(7, u).Value = "" If Worksheets("Sheet1").Cells(7, u).Value = "" Then Worksheets("Sheet1").Cells(7, u).Value = "END" End If u = u + 1 Loop End Sub このコードでは無反応でした。なにがいけないのかご指摘お願いいたします。 ExcelVBAです。
- ベストアンサー
- Visual Basic
- VBAのループ処理について
VBA(Excel2000)にて、参考書等を見て下記のコードを作成しました。 「セルA1かA10において、同じ数値が続けて入力されたら、最後のセル(一番下のセル)をB列にコピーする。」 Sub ループ() Dim a As Long With Range("a1:a10") For a = 1 To .Count - 1 If .Cells(a).value <> .Cells(a + 1).value Then .Cells(a, 2).value = .Cells(a).value End If Next .Cells(.Count, 2).value = .Cells(.Count).value End With End Sub 上記の「For idx = 1 To .Count - 1」の意味が分かりません。 よろしくお願いします。
- ベストアンサー
- Visual Basic
お礼
たびたびありがとうございました! 本当に感謝してもしきれません。 解決できました。 ありがとうございました!!!