• 締切済み
  • すぐに回答を!

エクセルのマクロ(繰り返しについて)

複数のセルの統合をしています。 目的:各セル内の文字を一つのセルに統合したいのです。 この作業をかなりたくさんせねばなりません。 現状行っていることは (1)A1~A10まで、各セル改行ありで統合してます。 式にすると(A1&CHASE(10)&A2......)というような感じです。 この一連の統合作業を100以上行わねばなりません。 しかも、統合せねばならないセル数が上記のように(A1~A10)10個のセルとは限りません。 A11~A16のセルの統合もあれば、A16~A30のセルの統合もあります。 これをどうにか、マクロを使用して行いたいのですが、 どのようにすればセルの統合がスムーズにいきますでしょうか? ちなみに、統合したいセルの和はkkkkkのいう文字が入っている、セルの直前までです。 つまり・・・ A1 A2 A3 A4(kkkkkk)→A3までを統合 ・ ・ ・ A5 A6 A7 A8 A9 A10(kkkkkk)→A9までを統合。 色々と検索してみたのですが、良い方法が見つかりません。 ひたすら、数式を打ち込むしかないのでしょうか? どなたかお知恵をお貸しください(T_T) よろしくお願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数6
  • 閲覧数312
  • ありがとう数0

みんなの回答

  • 回答No.6

ああ、すみません。No.3 ですが、ケアレスミスしましたね。すみません。No.3 の B2 の数式を次の 2 行の数式に差し替えてください。 B2 =if(a1="kkkkkk",a2,b1&" "&a2) なおご存じとは思いますが、セルの書式を「折り返して全体を表示する」に設定しないと表示上は改行されませんので、ご注意。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • エクセルのマクロで"~"を用いた数字の連番

    エクセルのマクロで"~"を用いた数字の連番 について、ちょっと困っています。 以下のように、セルに入力があります。 A1:0 A2:1 A3:2 A4:3 A5:4 A6:5 A7:6 A8:7 A9:8 A10:9 A11:10 次に、B1~B11の任意のセルに "無" もしくは "有" の文字を入力し、 B列に"有"の文字が入力されているA列の数字を"~"を用いて連番にしたい。 ただし、「0」は独立した値とし、「B1:有、B2:有」の場合、「0~1」ではなく、 「0,1」とカンマ区切りとする。 (例) A1:0/B1:有 A2:1/B2:有 A3:2/B3:無 A4:3/B4:有 A5:4/B5:有 A6:5/B6:有 A7:6/B7:無 A8:7/B8:無 A9:8/B9:有 A10:9/B10:無 A11:10/B11:無 ⇒ 『 A12 = 0,1,3~5,8 』としたい。 マクロでご教授いただけると幸いです。 よろしくお願いいたします。

  • 並び替え

    お願いします。 エクセルで例えばA1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11を並び替えるとA1,A10,A11,A2,,,,,,,となりますよね。そうではなくA1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11と並ぶようにはできないのでしょうか?

  • Excel計算

    エクセルでの計算ですが 数値を順に入れ合計を出すように計算式を入れたのですが、途中で計算式が変わってしまいます対処方法を教えてください。 例えば: セルA1~A5のトータルをセルA11にA11=SUM(A1:A5) セルA6~A10のトータルをセルA12にA12=SUM(A6:A10) A13=SUM(A1:A10)と計算式を入れて A1から順に1を入れていくとA6に1を入力した時点でA11に入れた計算しきがA11=SUM(A1:A6)と変わってしまいます なぜ変わってしまうのでしょうか

  • 回答No.5
  • MackyNo1
  • ベストアンサー率53% (1521/2850)

実際のデータの配置や作業の目的が不明なので、最も効率的な操作が異なりますが、A列に連続して入力されているデータで特定の文字「kkkkk」までの文字をセル内改行を使って連結したいということなら以下のような文字の割り付けの機能を用いる方法で一括して実行できます。 B1セルに「=IF(A1="kkkkk","",A1&CHAR(10))」と入力して下方向にオートフィルコピーします。 その選択状態のまま、右クリックして「コピー」、もう一度右クリックして「形式を選択して貼り付け」で「値」にし、そのまま、「データ」「区切り位置」で「完了」します。 そのまま、Ctrl+Shift+→キーのショートカット操作でB列から最終列まで選択し、最後に「編集」「フィル」「文字の割り付け」をし(2007以降のバージョンならホームタブの「編集」の中の下矢印アイコンをクリックして「両端揃え」を選択してください)、最後にもう一度右クリックして「セルの書式設定」の配置タブで「折り返して全体を表示する」を選択してみてください。 #マクロで対応する場合も含めて、このようなご質問では正確なシートのレイアウトや目的を具体的に提示されないと的確な回答が得られないと思います。 また、Officeソフトはバージョンによって使用できる機能や操作方法が大きく異なりますので、質問の際には必ずバージョンを明記するようにしましょう。

共感・感謝の気持ちを伝えよう!

  • 回答No.4

言いたい事はいくつかありますが・・・ Sub sample() Dim myStr As String Dim i As Long, j As Long     With Columns(2)         .ClearContents         .MergeCells = False     End With     j = 1: myStr = ""     For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row         If Cells(i, 1) = "kkkkkk" Then             With Range(Cells(j, 2), Cells(i - 1, 2))                 .WrapText = True                 .MergeCells = True             End With             Cells(j, 2) = Left(myStr, Len(myStr) - 1)             j = i + 1: myStr = ""         Else             myStr = myStr & Cells(i, 1) & vbLf         End If     Next End Sub こういうことでしょうか。 > 統合したいセルの和はkkkkkのいう文字が入っている、セルの直前までです。 これが可変で「jjjjjj」もありえる、なんていう場合は、 ここまでお三方が下さったご回答も「全て」無駄になってしまいます。 質問の際は「詳細を含めて」いただけないと、回答のしようが無いことをご考慮下さい。 回答に補足で「実は・・」「追加で・・」とやっていくと、本気でキリが無いですから。

共感・感謝の気持ちを伝えよう!

  • 回答No.3

>統合したものは、AのとなりのB列に示したいです! 何だかよく分からないので、具体的なことを説明してほしいのですが…。 もしかして、質問文にある「A4(kkkkkk)→A3までを統合」とは、「結合した文字列を B4 セルに記入し、セルの結合はどこにも施さない」という意味でしょうか?何となく今、そんな気がしてきました。そうであれば、もう回答が出ていますね。 ちなみに Excel において「統合」とは、重複しているデータの削除、合算などを行う機能のことで、ご質問の内容とは全く異なるものです。 マクロを使いたいとのことですが、できれば質問者さんが既に調べたこと、途中まででも書いてみたコードを載せていただきたかったです。何しろここは QA サイトであり、業務委託ではなく、質問をする場なので…。 なお、セルに B1 =a1 B2 =if(a1="kkkkkk",a2,b1&a2) C2 =a1="kkkkkk"   あるいは   =0+(a1="kkkkkk") と記入して B2 と C1 からそれぞれ下方向にオートフィルし、値複写で数式を除き、オートフィルタで「kkkkkk」でない行を抽出し、関係ない行をクリアすれば、お望みの結果は Excel の一般機能だけでサッとできてしまいます。たくさん繰り返す予定でもない限りマクロを使うまでもありませんので、ご参考に。

共感・感謝の気持ちを伝えよう!

  • 回答No.2

No1の方の回答はkkkkの右のB列に統合した文字データを表示する方法ですね。 では、わたしはそうではなくA列自体のセル自体を結合させ、そこに統合した文字データを表示する方法をやってみました。 Sub test01()   Dim n As Long   Dim Rng As Range, myC As Range   Dim myStr As String   For n = 1 To Cells(Rows.Count, "A").End(xlUp).Row     If Cells(n, "A").Value <> "kkkkkk" Then       If Rng Is Nothing Then         Set Rng = Cells(n, "A")       Else         Set Rng = Union(Rng, Cells(n, "A"))       End If     Else       If Not Rng Is Nothing Then         For Each myC In Rng           myStr = IIf(myStr = "", myC.Value, myStr & Chr(10) & myC.Value)         Next myC         Application.DisplayAlerts = False         Rng.Merge         Application.DisplayAlerts = True         Rng.Value = myStr         myStr = ""         Set Rng = Nothing       End If     End If   Next n End Sub

共感・感謝の気持ちを伝えよう!

  • 回答No.1
  • keithin
  • ベストアンサー率66% (5278/7939)

文字列結合した結果を「どこに」表示したいのですか。 作成例: sub macro1()  dim buf as string  dim r as long  range("B:B").clearcontents ’上から下まで繰り返す  for r = 1 to range("A65536").end(xlup).row   if cells(r, "A") = "(kkkkk)" then   ’kkk行の処理    cells(r, "B") = mid(buf, 2)    cells(r, "B").wraptext = true    buf = ""   else   ’それ以外の処理    buf = buf & vblf & cells(r, "A").value   end if  next r end sub

共感・感謝の気持ちを伝えよう!

質問者からの補足

さっそくご回答ありがとうございます!統合したものは、AのとなりのB列に示したいです!

関連するQ&A

  • 基準が変わっていく繰り返し計算

    以下の表のように、任意の数に対して結果を示す条件式作成のプログラムを作成したいので教えてください。 条件を満たした次の行からは基準が変わるように(条件を満たした行を基準とする)したいです。 よろしくお願いします。 A      B       条件式 0.89    0.00    '=IF($A2<MAX($A$2:$A2)*0.5,$A2-$A$2,) 0.66    0.00    '=IF($A3<MAX($A$2:$A3)*0.5,$A3-$A$2,) 0.54     0.00    '=IF($A4<MAX($A$2:$A4)*0.5,$A4-$A$2,) 0.85     0.00    '=IF($A5<MAX($A$2:$A5)*0.5,$A5-$A$2,) 0.66     0.00    '=IF($A6<MAX($A$2:$A6)*0.5,$A6-$A$2,) 0.53     0.00    '=IF($A7<MAX($A$2:$A7)*0.5,$A7-$A$2,) 0.95     0.00    '=IF($A8<MAX($A$2:$A8)*0.5,$A8-$A$2,) 0.32     -0.57    '=IF($A9<MAX($A$2:$A9)*0.5,$A9-$A$2,) 0.03     -0.29    '=IF($A10<MAX($A$9:$A10)*0.5,$A10-$A$9,) 0.51     0.00    '=IF($A11<MAX($A$10:$A11)*0.5,$A11-$A$10,) 0.63     0.00    '=IF($A12<MAX($A$10:$A12)*0.5,$A12-$A$10,) 0.37     0.00    '=IF($A13<MAX($A$10:$A13)*0.5,$A13-$A$10,) 0.14     0.11    '=IF($A14<MAX($A$10:$A14)*0.5,$A14-$A$10,) 0.38     0.00    '=IF($A15<MAX($A$14:$A15)*0.5,$A15-$A$14,) 0.64     0.00    '=IF($A16<MAX($A$14:$A16)*0.5,$A16-$A$14,) 0.21     0.07    '=IF($A17<MAX($A$14:$A17)*0.5,$A17-$A$14,) 以下同様に計算

  • エクセルVBAでRangeの引数制限?

    エクセル2000です。 Sub test() Range("A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,A21,A22,A23,A24,A25,A26,A27,A28,A29,A30,A31,A32,A33,A34,A35,A36,A37,A38,A39,A40,A41,A42,A43,A44,A45,A46,A47,A48,A49,A50,A51,A52,A53,A54,A55,A56,A57,A58,A59,A60,A61,A62,A63,A64,A65,A66,A67,").Select End Sub 上記の67個のセルを選択するマクロを実行すると 「実行時エラー1004 Rangeメソッドは失敗しました。'Global'オブジェクト」となってしまいます。 一個へらして66個にすると問題なく選択されます。 Rangeに個別で記載できる引数は66個までなのでしょうか? 質問に書いたセルは、数が一目でわかるための例なので、Range("A1:A67").Selectという回答以外でお願いします。

  • 以下の条件を満たす関数式を教えてください。

    ------------------------------------------------------------------------------- 条件 (1)A1が正数のとき、A2は0、かつ、A1が0のとき、A2は正数の値が入る。 (2)A4には「A3-A1-A2」の式が入る。 (3)A6、A7、A10、A11にはマイナスの符号が記述されないようにする。 (4)A3かつA4に対し、以下の条件が、A5&#65374;A8、またはA9&#65374;A12に表記される。 ア)A5またはA9には、A4の結果がゼロの場合に表示される。 イ)A6またはA10には、A3が負数、かつ、A4の結果が正数の場合に表示される。 ウ)A7またはA11には、A3がゼロ、かつ、A4の結果が負数の場合に表示される。 エ)A8またはA12に、A3かつA4の結果が正数の場合に表示される。 -------------------------------------------------------------------------------- たとえば添付ファイル「A1」が「0」のときに「A2」が「5000」という数値が入っている場合、その答えが反映するA6には1000(実際は-1000だが符号を示さないので1000となる)。 同時に逆のパタンが反映するA10は0というように表示させる…ことが目的です。 ためしにA6,A10に対しては以下の式を考えたのですが =IF(OR(A1<0,A2>0),A3-A1-A2,0) …うまくいきませんでした…お力をお貸しください!

  • エクセルワークシート上で、1、4、7、0、3、6、9、2、5、8を循環させる方法

    私は、エクセルVBA 超初心者のsustainedと言います。 エクセルワークシート上で、 A2=1 A3=4 A4=7 A5=0 A6=3 A7=6 A8=9 A9=2 A10=5 A11=8と予め入力されている状態で、 A1=3と入力するとA2=3 A3=6 A4=9 A5=2 A6=5 A7=8 A8=1 A9=4 A10=7 A11=0 となる様に循環(ソート?)する方法がわからないのですが? 本当に困っています。 補足  1、4、7、0、3、6、9、2、5、8 この数並びのまま A1=3と入力する  |          |  A1=3なので3、6、9、2、5、8、1、4、7、0となる。(A2~A11)              ,A1=5と入力すると5、8、1、4、7、0、3、6、9、2となる。(A2~A11) つまり、1、4、7、0、3、6、9、2、5、8は、10角形の頂点に配置させているとイメージしてくれれば わかり易いと思います。ナンバースの風車と同様に

  • エクセル 2010 マクロ ハイフン 並べ替え

    途中にハイフンが入る文字列の並べ替えをマクロを使用して教えてください。 A2からA列に入力されている最下位セルまでを見つけて(今回はA10まで) A2・・・2 A3・・・5-8 A4・・・1 A5・・・3-4 A6・・・1-2 A7・・・10-11 A8・・・12-13 A9・・・10 A10・・9 上記の並びを下記のようにしたいのですが出来ますでしょうか? A2・・・1 A3・・・1-2 A4・・・2 A5・・・3-4 A6・・・5-8 A7・・・9 A8・・・10 A9・・・10-11 A10・・12-13 B列以降にはデータが入っています。 宜しくお願い致します。

  • エクセルで罫線を引くとデーターを消すマクロ

    あまり、マクロに詳しくなくて どうしても分からないので質問します。 1 エクセルのA1のセルにデーターを入れると   A30迄自動的にA1のデーターをコピー 2 A5の下側に罫線を付けると、A6から A30まで、コピーしたデーターを消す (A5に入れる罫線は、ランダムで、A3の時もあれば、 A20の時もあります) 3 A6に違うデーターを入れると 1と同じくA36までコピーする 4 2と同じくA10の下側に罫線を付けると、 A11からA36までデーターを消す 以上のような作業でデーターを コピー、ペーストで繰り返しているのですが、 罫線を引くことを基準に、マクロで出来ないかと 思い質問します。 よろしくお願いします。  

  • エクセルの並び替えで順番どうりにならない

    エクセル2003です。 並び替えでA列を対象にして 以下のように並び替えたいです。 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12 ですが並び替えを実行すると A1 A10 A11 A12 A13 A2 A3 A4 A5 A6 A7 A8 A9 B1 B10 B11 B12 B2 B3 B4 B5 B6 B7 B8 B9 となってしまいます どのような方法がありますか。 よろしくお願いします。

  • Excelのマクロを使ってワークシート1にワークシート2のセルの値をコ

    Excelのマクロを使ってワークシート1にワークシート2のセルの値をコピーするマクロを作りたいと思っています。 例えば、ワークシート2のA1~A30のセルには1~30の値が順に入っているとします。 それをA1から3の倍数分、つまりA1,A3,A6,A9,・・・,A27,A30の値を ワークシート1のA1~A11のセルに自動で挿入してくれるマクロってどう作ればいいのでしょうか? わかりにくいかもしれませんが、よろしくお願いします。

  • エクセルの使用方法で困ってます。

    お世話になります。 シート1には、A1からA100にかけて氏名が記載されております。 一方、シート2にはA1からA5をセルの結合がされており、つまり一つのセルとなっております。A6からA10、A11からA15以下同様に結合されております。 この場合に氏名をシート1のA1をシート2のA1からA5の結合されたセルへ以下同様に貼り付けたいのですが、私が作業するとシート1のセルから4名飛びに貼り付けとなってしまいます。 一気に貼り付ける方法教えてください。

  • EXCELで16進を使いたいのですが。

    EXCELでは、たとえばセルA1に「1」、A2に「2」を入力して、 A1、A2を選択してA3以下にドラッグしていくと、 A3は「3」、A4は「4」と自動的に入力されていきますよね。 これでいくと当然、A9が「9」で、A10が「10」となりますが、 ここでA10を「A」、以下「B,C,D,E,F」とつづけて、A16はまた「1」 にしたいのです。 こういうことはできないのでしょうか。 仕事上、EXECLで16進を使うことが頻繁にあるので是非方法があれば 知りたいのですが。 よろしくお願いします。