• ベストアンサー

Excel-VBA セルのデータ書出し

セル「A1」に次のデータが在るとします。 セルの書式設定は「折り返して全体を表示する」です。 金田 曽我部 武田 安藤 森田 ▼やりたい事は、 セル[A1]のデータを、一名ずつに分解して⇒セル[B1・B2・B3・B4・B5・・・]へ VBAで書き出したいのですが初心者にてコードが分かりません。 サンプルコードを紹介していただきたいのですが、 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一例です。 名前は改行(Alt+Enter)している事としています。 a = Split(Cells(1, 1), vbLf) For i = LBound(a) To UBound(a) Cells(i + 1, 2) = a(i) Next

sakuraww
質問者

お礼

mu2011さん回答有難うございます。 実を言いますと「ANo.4」回答とどちらを使用するか迷いましたが、 「ANo.3 Split」を採択しました。 理由は、複数のセルの値を、B列配下へ書き出すことになる事から、データカウントが必須となります。等々からご教授いただいた手法を実運用したいと思います。 以上

その他の回答 (4)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.5

>課題の説明不足があったかもしれませんが、 >実際は複数のセルの値をB列配下へ次々と下記加える運用となる事から... その場合もちょっとした応用のみ。 件数を取得する必要もありません。 Sub test2() 'A列のデータ範囲を選択して実行   Dim s As String   Selection.Copy   With New DataObject     .GetFromClipboard     s = .GetText     .Clear     .SetText Replace$(s, """", "")     .PutInClipboard   End With   ActiveSheet.Paste Range("B1") End Sub

sakuraww
質問者

お礼

end-uさん、ご丁寧な回答有難うございます。 締め切り後の回答にてQ&Aが出来なくなりました。 新たに「Excel-VBA セルのデータ書出し(Q2)」で質問しなおします。 ご教授宜しくお願い致します。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

Sub test()   With New DataObject     .Clear     .SetText Range("A1").Value     .PutInClipboard   End With   ActiveSheet.Paste Range("B1") End Sub 上記コードを標準モジュールに書いて VBEメニュー[ツール]-[参照設定]の「参照可能なライブラリファイル」に Microsoft Forms 2.0 Object Library をチェックして追加します。 (UserFormを追加する事でも参照追加されます) その後、コード実行。 手作業では、セルまるごとコピーするのではなく A1セル編集状態で文字列だけコピー(数式バーの内容だけコピー)し B1セルにペースト。 ..と同じような意味のコードです。

sakuraww
質問者

補足

end-uさん回答有難うございます。 思いもよらない手法をご教授いただき感謝しています。 課題の説明不足があったかもしれませんが、 実際は複数のセルの値をB列配下へ次々と下記加える運用となる事から、 ご教授いただいた「PutInClipboard」等は件数を取得できないように思え、 今回は運用を見合わせました。 しかし必ず使用する機会が有ろうかと思います。 貴重な手法として留めおかさせていただきます。 以上

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

既に回答があるように、わたしも普通は、Split関数を使う。 それには (1)Split関数の存在とどういう機能か (2)セル内改行が(文字コード10) Chr(10) で成り立っていること (3)その他 を知っていることが必要です。 -- Split以外の回答を挙げておく。Instr 関数利用の繰り返し。1セル10氏名までと仮定。 同列に多数セルある場合は下記のk=1を除いて(各セルの繰返しの外に出して)全体を繰り返しする。 ーーー Sub test01() k = 1 'B列の第1行目からに結果を出す x = Cells(1, "A") s = 1 For i = 1 To 10 p = InStr(s, x, Chr(10)) If p = 0 Then Exit For Cells(k, "B") = Mid(x, s, p - s) k = k + 1 s = p + 1 Next i End Sub

sakuraww
質問者

補足

回答有難うございました。 InStr関数について良く理解できました。 しかし最後の値が出力できませんでしたが、次の様に加筆する事で成功しました。 x = Cells(1, "A")  ↓ x = Cells(1, "A") & Chr(10) それと、現実は1セル10氏名と固定できないため、実運用を見合しました。 以上

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

区切りが何なのか解らないが、1.はchr(10)で改行している場合(" "でも動くか)、2.は" "が区切りの場合です。 たとえば、 1. A1形式 C1:F1を使っていないなら、「区切り位置」を利用して下記のように。 Sub test1() Range("A1").TextToColumns Destination:=Range("B1"), OtherChar:=Chr(10) Range("C1:F1").Copy Range("B2").PasteSpecial Transpose:=True Range("C1:F1").ClearContents End Sub 2. R1C1形式 ふつうにVBAならたとえば下記のように。 Sub test2() s = ActiveSheet.Cells(1, 1) l = Len(s) k = 1 i = 1 While i < l j = InStr(i, s, " ") If j = 0 Then j = l + 1 ActiveSheet.Cells(k, 2) = Mid(s, i, j - i) i = j + 1 k = k + 1 Wend End Sub

sakuraww
質問者

補足

目的の結果が得られませんでした。

関連するQ&A

  • Excel-VBA セルのデータ書出し(Q2)

    セル[A1:G5]に次の様なデータが適当に在るとします。 各セル内のデータ数は様々で空のセルも在ります。 セルの書式設定は「折り返して全体を表示する」です。 '---------- 中国 '---------- 鳥取県  ←各データは[Alt]+[Enter]で改行。 島根県 '---------- 岡山県 広島県 山口県 '---------- ▼やりたい事は、セル[A1:G5]のデータを、 セル[A11]直下へ次々と書き出したいのですが、 選択範囲が、 [A1:A5]とか[B1:B5]…は上手く張り付きますが、 [A1:G1]とか[A1:G5]…は上手く張り付きません!? ご教授宜しくお願い致します。 '--------------------------- Sub test22() '行列のデータ範囲を選択して実行 Dim s As String Selection.Copy With New DataObject .GetFromClipboard s = .GetText .Clear .SetText Replace$(s, """", "") .PutInClipboard End With ActiveSheet.Paste Range("A11") End Sub '--------------------------- 以上

  • 【VBA】条件を満たしたセルを塗り潰し

    VBAで下記のようにしたいのですが、どのようにすれば良いでしょうか?      A 1    100 2    110 3    120 4    130 5    140 6    150 7    160 8    170 9    180 【条件】この場合、A1:A9の範囲内でB1の値を超える値が入力されているセルを黄色で塗りつぶす ※前提として、B1に150と入力されているとします 上記のようなVBAを作成したいと思っています。 この場合、塗りつぶしの対象となるセルはA7,A8,A9となります。 条件付き書式で対応できるのですが、Excel2007で作成したファイルをExcel2003で開くと条件付き書式が反映しませんでしたので、VBAで対応しようと思いました。 宜しくお願いします。

  • EXCEL2003 重複データに色を付けるVBA

    A列のA2からA21に氏名、B列のB2からB21に住所が入力済です。A列で重複しているデータに色をつけて、さらに並び替えをしたいと思います。色は黄色、並び替えの設定は黄色で色を付けたセルがA2から順に表示するVBAを教えていただけませんでしょうか。またお手数でも列をB列、C列に変更した場合についても教えていただけませんでしょうか。VBAコードの貼り付けはできます。よろしくお願いします。

  • VBA 飛び飛びのセルを選択するには

    B1からB5のセルの範囲のどこかに○という文字が あるとします。もし、B2とB4に○があったらその隣の A2とA4のセルを選択してコピーしたいのです。 このような場合どのようなVBAのコードを書けばいいのでしょうか? お分かりの方よろしくお願いします。

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

  • Excel2000のVBAについて教えてください

    はじめまして。 現在、以下のような表があるとき、コードCがブレイクするごとに、データBに対する絶対値の最大値を求めるVBAを作成しようと思っています。 また、求めた絶対値の最大値を持つデータを抽出して、各コードCに対する最大値のみのデータを別シートに貼り付けたいとも思っています。 同一コードC内に絶対値の最大値が複数存在することもあります。 データ件数は処理ごとに変更がありますので未定です。 なお、Microsoft Queryはインストールされていません。 以上の条件でどのようなコードを作成すれば良いのか教えていただければ幸いです。 例として下記のような表1のデータを、表2のように変更したいと考えています。 よろしくお願いいたします。 表1 コードA コードB コードC データA データB データC 48     01     22   -179.4  2.402  3.864 48     20     22   -248.3  4.102  3.826 49     06     22   0.1031  -2.02  3.986 49     07     22   -153.9  1.773  3.902 50     01     22   -179.4  2.402  3.872 50     07     22   -153.9  1.773  3.886 51     08     21   -6.386  0.069  2.622 51     09     21   -74.24  0.073  2.538 52     09     21   -74.24  0.073  2.522 52     12     21   -85.48  0.084  2.508 53     10     20   0.2928  2.427  5.986 53     11     20   -198.4  -1.14  5.903 54     11     20   -198.4  -1.14  5.886 54     13     20   -231.3  -1.73  5.872 55     12     21   -85.48  0.084  2.499 55     26     21   -115.8  0.114  2.462 56     13     20   -231.3  -1.73  5.864 56     22     20   -320.2  -3.32  5.826 表2 コードA コードB コードC データA データB データC 56     22     20   -320.2  -3.32  5.826←コードCが20のグループでデータBが絶対値の最大値を持つデータ 55     26     21   -115.8  0.114  2.462←コードCが21のグループでデータBが絶対値の最大値を持つデータ 48     20     22   -248.3  4.102  3.826←コードCが22のグループでデータBが絶対値の最大値を持つデータ

  • 空白セルと行に色をつけるVBA Excel2010

    VBAの超初心者です。 条件が一致した時に、セルの背景を黄色にしたいのですが、VBAで教えて下さいませんか? D1が空白セルの場合には、C1のみを黄色。 D1とB1の両方が空白の場合は、A1からC1を黄色にしたいのです。 尚、行はどんどん増えて行く予定です。 「条件付き書式」では考えておりません。 よろしくお願いします。

  • 【Excel VBA】結合セルのデータ削除

    Excel2003を使用しています。 1~1300行までのデータの中の、ある一定の範囲と間隔でデータを削除するためのコードを書きたいのですが、セルが結合されているため、うまく処理できません。 一定の範囲と間隔とは、 B7:O26、B33:O52、B59:O78、B85:O104…B1281:O1300 です。 このひとつの範囲が1ページ分のデータで、全50ページあり、範囲内のセルは全て2行1列で結合されています。 上記のような場合は、どのようにコードを書いたらいいでしょうか? よろしくお願いします。

  • excel2000 セル内のデータの表示について

    すべてのセルにデータが「入力済みか、未入力か」一目でわかるように、セルの大きさに収まる分だけしかデータを表示しないようにするにはどうしたらよいのでしょうか。 また、多めの文字を入力すると、その分だけセルが伸びてセルの大きさが大きくなってしまいます。セルの書式設定で「折り返して全体を表示する」のチェックをはずしても、マウスポインタを動かした拍子に元に戻ってしまいます。固定する方法はありますか? わかりづらい文章で恐れ入りますが、良い方法があったら教えてください。

  • VBAでセルに色付けは?

    教えてください エクセルの条件付き書式では下記の 事ができません。 VBAでセルに色をつける 方法を教えて欲しいのですが。 例 セルA1 に 10   セルB1 に 入れた数字が      10以下なら   青   11から20なら 赤   21から25なら 黄   26以上なら   ピンク   と言う感じで  B1 のセルに   その数字と色を表示したいのですが   最終的には8色表示にしたいです。   よろしくお願いします   WINXP  EXCLは2002です

専門家に質問してみよう