AKB48の推しメンをセンターにできちゃうかもしれない!? >>

はじめまして よろしくお願いします。

エクセルで、ひとつのセル内に複数行に分けて入力してあるものを
行でそれぞれひとつのセルに分け直したい場合、

例えばA1のセルに
 1234
 aabbcc
A2のセルに
 12345
 aaabbbccc
 123
と入力してあるものを

A1→1234
A2→aabbcc
A3→12345
A4→aaabbbccc
A5→123
としたいとき、何かいい方法ありますか。

A 回答 (3件)

1.A1のセルとA2のセルを選択してコピー


2.メモ帳などのエディタへ貼り付け
3."(ダブルコーテーション)がくっついているはずなので、置換えなどで"を削除する
4.編集したものを全部選択してコピー
5.エクセルへ貼り付け

これでOK。ちょっと手間ですけど...
    • good
    • 1
この回答へのお礼

できました!どうもありがとうございました。

お礼日時:2006/01/29 11:14

こんばんは。



本来、横に区切るのでしたら、メニューのデータ-区切り位置 のダイアログを使います。
(良く使うようでしたら、ユーザー設定から、区切り位置ボタンをツールメニューに貼り付けておくと便利です。)その他のところの区切り文字に、「Ctrl + J 」で区切りをさせて、横に出しますが、縦の場合は、まあ、一般的は、VBAで行うのが一番かもしれませんね。すでに、VBAの回答も出ているようですが、まあ、ものは試しに!

'<個人用マクロブックの標準モジュールに登録し-ユーザー設定のツールボタンに取り付けたるすると便利かも。簡易型でも一通りのエラー処理はしています。切り分けないときは、ただの値コピーになります。>


Sub SplitCharTen()
Dim c As Range
Dim i As Long
Dim ar() As Variant
Dim buf As Variant
Dim a As Variant
Dim rng As Range
If TypeName(Selection) <> "Range" Then _
  MsgBox "最初に、切り分ける範囲をワークシート上で指定してください。", vbInformation: Exit Sub
If WorksheetFunction.CountA(Selection) = 0 Then _
  MsgBox "データのある場所を指定してください。", vbInformation: Exit Sub
On Error Resume Next
 Set rng = Application.InputBox("貼り付ける場所を指定してください。", , "$A$1", Type:=8)
On Error GoTo 0
 If rng Is Nothing Then Exit Sub
 
For Each c In Selection
 If InStr(c.Value, vbLf) > 0 Then
  buf = Split(c.Value, vbLf)
  For Each a In buf
  ReDim Preserve ar(i)
  ar(i) = a
  i = i + 1
  Next a
  Erase buf
 Else
  ReDim Preserve ar(i)
  ar(i) = c.Value
  i = i + 1
 End If
Next c
 rng.Cells(1).Resize(UBound(ar()) - LBound(ar()) + 1).Value = _
 WorksheetFunction.Transpose(ar())
End Sub
    • good
    • 0
この回答へのお礼

どうもありがとうございました。今度やってみます。

お礼日時:2006/01/29 11:20

VBあですが、標準モジュールに


Sub test01()
d = Range("A65536").End(xlUp).Row
K = 2
For i = 2 To d
s = Split(Cells(i, "A"), Chr(10))
For j = 0 To UBound(s)
Cells(K, "B") = s(j)
K = K + 1
Next j
Next
End Sub
を貼り付けて、実行してください。
例データ A列  結果B列
"12
22345"12
"23
sdfg"22345
"wer
12er
3457"23
12ersdfg
wer
12er
3457
12er
A列A1,A2、・・・のデータをA1,A2、・・も含めて、A列に戻すのは、複雑になるので(配列などに、一旦覚えさせなければならない)分解したものを、B列にセットしてます。
関数では、2行、3行、4行などが混じると複雑になって、手に負えない。
    • good
    • 0
この回答へのお礼

どうもありがとうございました。ちょっと私には難しそうですが時間のある時挑戦してみたいと思います。

お礼日時:2006/01/29 11:17

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルのセルの中で改行して入力したものを分割したいんです。

エクセルの入力編集について質問です。

セルに改行(Alt&Enter)をして下記のように入力を行ったのですが、

 Γ ̄ ̄Τ ̄ ̄ ̄ ̄¬
 |番号|内容1 |
 |  |内容2 |
 L__⊥____」

データ処理に不便なために同一セル内にある「内容1」と「内容2」を下記のように別々のセルにしたいと思います。

 Γ ̄ ̄Τ ̄ ̄ ̄ ̄¬
 |番号|内容1 |
 ―――――――――
 |  |内容2 |
 L__⊥____」

もしくは、
 Γ ̄ ̄Τ ̄ ̄ ̄ ̄¬
 |番号|内容1 |
 ―――――――――
 |番号|内容2 |
 L__⊥____」

手作業にてコピーアンドペーストと行の挿入を繰り返しを行うのは、非常に時間がかかるかと思います。

そこで、なにか一括で処理できる方法はありませんでしょうか?お願いします。
また、一括ではなくても入力が簡単になる方法はありませんか?

最後になりますが、Excel 2003を利用しています。

Aベストアンサー

    A      B
1  番号A  内容A
         内容B
2  番号B  内容C
         内容D
3  番号C  内容E
         内容F

のように並んでいる場合ですが、

1.A1:B3を選択してコピーし、Wordに形式選択(HTMLかリッチテキスト)で貼り付け。
2.Wordに貼り付けた全体を選択してコピーし、Excelの別シートに貼り付け。
3.番号の列が結合された状態なので、それらのセルをまとめて選択して結合解除。

ではいかがでしょうか。

Qセル内の改行された文字列を分割

初めて質問します。

添付画像のようにセル内の改行された文字列を学校名1、2、3・・・といったように分割をするにはどうすればいいのでしょうか。
ちなみにデータには改行されていない(学校名が一つだけ)のデータもあります。

よろしくお願い致します。

Aベストアンサー

#1です。Excelの機能「区切り位置」でできました。

EXCELのバージョンは何ですか?
2003までなら、メニューの[データ]>[区切り位置]
2007以降なら[データ]>[データツール]グループの[区切り位置]

バージョンに合わせて読み替えてください。
セルB2~セルF5には何も無い状態から始めるものとしますよ。

1)セルA2~A5を選択して「コピー」
2)セルB2に「貼り付け」
3)そのままの状態で、上記の方法で[区切り位置]を起動
4)「カンマやタブなどの・・(後略)」を選んだ状態で「次へ」
5)「区切り文字」の「その他」にチェック(レ点)付ける
6)「その他」の右隣のボックスをクリックしてCtrl+Jキー押下
  (何も入力されないように見えるが、下にある「データのプレビュー」が変化する)
7)「完了」ボタンをクリック

QExcel マクロ VBA セル内で改行された文字列の分割

はじめまして。
ExcelのVBA初心者で、ちょっと困っています。

(例)
(1) セルA1に以下のような改行された文字列が入力されています。
【セルA1】
a
aa
aaa
b
bb
bbb

(2) セルA1内の文字列を3行毎に分割し、セルA2以降に表示させたい。
【セルA2】
a
aa
aaa
【セルA3】
b
bb
bbb

※ 今回の例ではセルA1に6行しかありませんが、実際に行数は決まっていません。

そこで以下のようなVBAを見よう見まねで作り、1行毎の分割はうまくいったのですが、『3行毎に分割』ができません。

Sub 分割()
Dim A, B, C
A = Split(Range("A1"), Chr(10))
B = 0
For Each C In A
B = B + 1
Range("A2").Offset(B - 1, 0).Value = C
Next
End Sub

ご教授いただけると助かります。
よろしくお願い致します。

Aベストアンサー

Sub 分割()
Dim A, B, C, E
A = Split(Range("A1"), Chr(10))
B = 1
E = 1
For Each C In A
If E = 1 Then
Range("A2").Offset(B - 1, 0).Value = C
Else
Range("A2").Offset(B - 1, 0).Value = _
Range("A2").Offset(B - 1, 0).Value & Chr(10) & C
End If
If E = 3 Then
B = B + 1
E = 0
End If
E = E + 1
Next
End Sub

でどうでしょう。

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Qセル内で改行された文字列を1行ずつ他のセルに移す

excelで、こんなことできますか?
book1で、セル内に下のような改行した文字列があり、それを入力したら、
book2に、文字列を1行ずつ他のセルに取り出したいのですが…できますか?

book1 (セルは折り返して全体を表示する) book2 (仕上げの画面)
A         A
あいうえお                    1 あいうえお
1 かきくけこ                    2 かきくけこ
さしすせそ                    3 さしすせそ
→ 4 たちつてと
2 たちつてと                    5 なにぬねの
なにぬねの                     6 はひふえほ

3 はひふへほ

教えていただけると助かります。(ただしマクロはよくわからないのですが…)

excelで、こんなことできますか?
book1で、セル内に下のような改行した文字列があり、それを入力したら、
book2に、文字列を1行ずつ他のセルに取り出したいのですが…できますか?

book1 (セルは折り返して全体を表示する) book2 (仕上げの画面)
A         A
あいうえお                    1 あいうえお
1 かきくけこ                    2 かきくけこ
さしすせそ...続きを読む

Aベストアンサー

シート1のA1セルに入力された文字が有るとしたらシート2のA1セルには次の式を入力して下方にドラッグコピーします。

=TRIM(MID(SUBSTITUTE(Sheet1!$A$1,CHAR(10),REPT(" ",100)),(ROW(A1)-1)*100+1,50))

横方向の列に表示させるとしたらシート2のA1セルには次の式を入力して右横方向にドラッグコピーします。

=TRIM(MID(SUBSTITUTE(Sheet1!$A1,CHAR(10),REPT(" ",100)),(COLUMN(A1)-1)*100+1,50))

その場合にはシート1のA列に同様の文字の入力が複数行あった場合でも、式を下方にもドラッグコピーすることで良いでしょう。

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

Qエクセル。複数行あるセルの分割はできますか?

こんにちは。
教えてください!
たとえば、B1のセルに次のように3行でデータが入力されていたとします。
B1「日本
  アメリカ
  イギリス」
これをそれぞれ分割して次のようにできる関数はありますか?
B1「日本」
B2「アメリカ」
B3「イギリス」

それが簡単にできると仕事がスムーズになるので助かります。
もし次のことも解決できる方法があれば教えてもらえませんか?
A1「8月30日」
B1「日本、アメリカ、イギリス(3行で入ってます)
C1「出発」
というようなデータがあって、B1をそれぞれの国で分割して、A1とC1のデータをアメリカが入っている行、イギリスが入っている行に自動的にコピーされる。
これは関数ではなくて、マクロになるのかな?とも思うのですが、「分割が行われた行までコピー」というやり方がさっぱりわからないでいます。(その前に分割する方法が分からないんですけど・・・)
ちなみに、データがずらーっと並んでいるリストの一部にあるB1のようなデータを整理したいというのが、目的になります。

どうぞ宜しくお願い致します。

こんにちは。
教えてください!
たとえば、B1のセルに次のように3行でデータが入力されていたとします。
B1「日本
  アメリカ
  イギリス」
これをそれぞれ分割して次のようにできる関数はありますか?
B1「日本」
B2「アメリカ」
B3「イギリス」

それが簡単にできると仕事がスムーズになるので助かります。
もし次のことも解決できる方法があれば教えてもらえませんか?
A1「8月30日」
B1「日本、アメリカ、イギリス(3行で入ってます)
C1「出発」
というようなデータがあって、B1をそれぞれ...続きを読む

Aベストアンサー

こんにちは。

よくよくテストして下さい。

Sub Sample()

  Dim nLastRow As Long
  Dim i    As Long
  Dim j    As Long
  Dim s    As String
  Dim v

  nLastRow = Cells(Rows.Count, "A").End(xlUp).Row
  
  Application.ScreenUpdating = False
  For i = nLastRow To 2 Step -1 ' // 2行目まで
    s = Cells(i, "B").Text
    If Len(s) > 0 Then
      v = Split(s, vbLf)  ' // セル内改行で配列化
      If UBound(v) > 0 Then
        Rows(i + 1).Resize(UBound(v)).Insert
        For j = 0 To UBound(v)
          Cells(i + j, "A").Value = Cells(i, "A").Value
          Cells(i + j, "B").Value = v(j)
          Cells(i + j, "C").Value = Cells(i, "C").Value
        Next
      End If
    End If
  Next

End Sub

こんにちは。

よくよくテストして下さい。

Sub Sample()

  Dim nLastRow As Long
  Dim i    As Long
  Dim j    As Long
  Dim s    As String
  Dim v

  nLastRow = Cells(Rows.Count, "A").End(xlUp).Row
  
  Application.ScreenUpdating = False
  For i = nLastRow To 2 Step -1 ' // 2行目まで
    s = Cells(i, "B").Text
    If Len(s) > 0 Then
      v = Split(s, vbLf)  ' // セル内改行で配列化
      If UBound(v) > 0...続きを読む

Qexcelで1つのセルだけを分割する方法

excelで、行全体または列全体でなく、1つのセルだけを縦または横に分割する方法はありますか?

ご存知の方、是非お教えください。

Aベストアンサー

エクセルでセルは最小単位です、分割は出来ません。
むしろ逆に考えて、不要な行はセルを結合して1列的に見せてはどうでしょう。
見た目でやるなら(多分したいことを想像して)
桁合わせだけの問題なんですが。
(1)文字列のケースとする。数値や半角が混じると
うまくいかないかも。
(2)例えばD1セルに半角スペース10個を入れる。
(3)A列はフォントをPのつくものは避ける。
(4)例えばB列、c列に文字列データが入っているとする。
(5)A1セルに
=MIDB($D$1,1,10-LENB(B1))&B1&MIDB($D$1,1,10-LENB(C1))&C1
といれて下行に複写する。LENBをあえて使う。
(データ例)
    (A列)       (B列)  (C列)
大阪市 西園寺大阪市西園寺
長岡京市 熊山長岡京市熊山
津市 佐藤津市佐藤
(6)真中に縦に図形の直線を貼りつける。

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング