[[20170409004640]] 『マクロでセルの結合』(Nomu) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロでセルの結合』(Nomu)

はじめまして。
スミマセン、マクロ初心者で色々と考えていますが、良い案が
浮かばずに、困っております。ヒントだけでも、教えて頂け
ますと、幸いです、
ご相談ですが、以下のようなシートがあります。

  A   B     C    D     E    F
1 日付 名前  県名 商品名  希望  その他
2 4/1 〇〇〇  愛媛 パソコン 自宅に  特になし
3                      送付
4                      希望
5 4/2 △△△ 島根 プリンタ 午前着  特になし
6 4/2 □□□ 大阪 スキャナ 午後着  特になし
7 4/3 ◎◎◎ 香川 メモリ   会社に  特になし
8                     送付
9                    希望
10                    致します。

5行目、6行目は、1行に収まっているので、問題無し。

2行目と7行目は、E列の文字が、それぞれ、3行目と
4行目。8行目〜10行目にわかれてしまっています。
これを、それぞれE2セルとE7セルに収めたいのです。

状況としては、E列以外は、文字が分かれてしまうような
ことはありません。また、E列の文字は、何行に分かれて
しまうのか?はランダムです。

こう言ったことは、そもそもマクロでの対応は難しいの
でしょうか。その判断さえ、出来ない状況ですので、
何卒宜しくお願い致します。

< 使用 Excel:Excel2010、使用 OS:Windows8 >


すみません。
1点追加です。

Eセルを結合して、もし空白行が出来てしまったら、
上に詰めたいです。
宜しくお願い致します。
(Nomu) 2017/04/09(日) 01:51


 たとえば、こんなことですか。

 Sub Sample()
    Dim r As Range
    Dim a As Range

    On Error Resume Next
    Set r = Columns("A").SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0

    If r Is Nothing Then Exit Sub

    For Each a In r.Areas
        With a.Cells(1).Offset(-1, 4)
            .Value = .Value & vbLf & Join(WorksheetFunction.Transpose(a.Offset(, 4)), vbLf)
        End With
    Next

    r.EntireRow.Delete

 End Sub

(β) 2017/04/09(日) 07:05


βさん

有り難うございました。
思った通りのことが出来ました。
これから、少しずつ勉強していきたいと思います。

また、宜しくお願い致します。
(Nomu) 2017/04/09(日) 20:20


お忙しいところ、スミマセン。
また、お伺いしたいことがありまして、書き込みをさせて頂きました。
先日、βさんにご回答頂き、試したところ、問題無く動作しました。

ただ、私の質問が悪かったのか、取り込み行が多くなる(質問では、
セルの結合が2箇所でしたが、5箇所位になっています。)と、「型が
一致しません。」とエラーが出て、以下の部分が、黄色くなりました。

.Value = .Value & vbLf & Join(WorksheetFunction.Transpose(a.Offset(, 4)), vbLf)

また、不思議なことに、取り込み行を短くして、試すと、エラーが
出たり出なかったりします…。

色々と調べると、「型が一致しません。」は、文字通り型が違う
ことによるエラーとのことで、取り込み行の長さではなく、元の
データの問題なのかな?とも思ったりしておりますが、どうすれば
良いのか分からず…。
元のデータの問題なのか?どうすれば良いのか?等、ヒントだけでも
頂けますと、幸いです。

本当にお手数をお掛け致します。

(Nomu) 2017/04/10(月) 23:02


 連続して空白があるセルで多いものはどれぐらいでしょうか。
 Transposeの制限で 65536 を超えるとエラーになるということはあります。

 あるいは、文字列 改行 文字列 改行 文字列 改行 ・・・・・ となる 1セルに格納される値の最大の長さって
 (改行を1文字に数えて)32767 文字を超えることってありますか?

 あるいは・・(これが可能性高い?)
 結合すべき E列のセルに エラー値 が入っているということはないですか?

(β) 2017/04/10(月) 23:33


βさん

お手数をお掛け致しまして、本当に申し訳ありません。
今日、確認したところ…

連続して空白があるセルで多いものはどれぐらいでしょうか。 7でした。

32767 文字を超えることってありますか? ありません。

色々と試してみたところ、正常に結合出来るサンプルは、一つ
のシートに結合すべき場所が、いくつあっても、全て結合出来
ましたので、βさんのご指摘のように、元のデータに問題が
あるのでは?と思いました。
エラー値の見つけ方が分からないので、明日「型が一致しませ
ん。」が出てしまったサンプルのセルを一文字ずつ確認して
みたいと思います。

また、ご相談をさせて頂くかと思いますが、お時間が、ござい
ましたら、宜しくお願い致します。
(Nomu) 2017/04/11(火) 23:22


 E列を選択し ホームタブ 検索と選択の 条件を選択してジャンプ(S)
 数式か定数を選んで、チェックをエラー値のみにしてOK。

 エラー値があれば、選択されるのでわかります。

(β) 2017/04/11(火) 23:59


βさん

本当に色々と有り難うございます。

現状では、A〜I列まで使用しており、結合すべき必要があるのは、
E列のみと言うことに変わりはありません。
また、E列は、最大で、10行分位結合させています。

そして、本日分かったことがありまして、やはり20行とか30行
とか…まとめて、処理をさせようとすると、「型が一致しません」
とエラーが出るのですが、その20行を5行ずつとか、細かくして、
処理をさせると、全ての結合が、エラーも出ずに処理が出来る
ことが分かりました。

また、もう一つ分かったことが、20行とか30行で処理をさせよう
としてエラーが出たものに対して、行の挿入で、空白行を挿入し、
再度マクロをまわすと、問題無く処理が出来ることが分かりました
。(↓下のサンプルで言いますと、4行目と5行目の間とか、6行目と
7行目の間とか。)

1 日付 名前  県名 商品名  希望  その他
2 4/1 〇〇〇  愛媛 パソコン 自宅に  特になし
3                      送付
4                      希望
5 4/2 △△△ 島根 プリンタ 午前着  特になし
6 4/2 □□□ 大阪 スキャナ 午後着  特になし
7 4/3 ◎◎◎ 香川 メモリ   会社に  特になし
8                     送付
9                    希望
10                    致します。

初心者のわたしが言うのもあれですが、βさんに教えて頂いたコー
ドは間違いなく、正しくて、わたしの元データあおかしいと思う
のですが、このような状態になってしまうのも、エラーデータの
一つなのでしょうか。
(教えて頂いた方法ではエラーは見つかりませんでした。)

お時間のございます時で構いませんので、宜しくお願い致します。

(Nomu) 2017/04/13(木) 23:46


たとえば

     |[A]   |[B]   |[C] |[D]     |[E]         |[F]     
 [1] |日付  |名前  |県名|商品名  |希望        |その他  
 [2] |4月1日|〇〇〇|愛媛|パソコン|自宅に      |特になし
 [3] |      |      |    |        |送付        |        
 [4] |      |      |    |        |希望        |        
 [5] |      |      |    |        |しますが    |        
 [6] |      |      |    |        |だめなら    |        
 [7] |      |      |    |        |会社に      |        
 [8] |      |      |    |        |送って      |        
 [9] |      |      |    |        |ください。  |        
 [10]|      |      |    |        |その        |        
 [11]|      |      |    |        |場合は      |        
 [12]|      |      |    |        |宛先に      |        
 [13]|      |      |    |        |経理部      |        
 [14]|      |      |    |        |をいれて    |        
 [15]|      |      |    |        |ください。  |        
 [16]|      |      |    |        |なお        |        
 [17]|      |      |    |        |パソコンは  |        
 [18]|      |      |    |        |クッション  |        
 [19]|      |      |    |        |などで      |        
 [20]|      |      |    |        |しっかり    |        
 [21]|      |      |    |        |梱包        |        
 [22]|      |      |    |        |しておいて  |        
 [23]|      |      |    |        |ください。  |        
 [24]|      |      |    |        |また        |        
 [25]|      |      |    |        |付属の      |        
 [26]|      |      |    |        |コードや    |        
 [27]|      |      |    |        |キーボード  |        
 [28]|      |      |    |        |等          |        
 [29]|      |      |    |        |および      |        
 [30]|      |      |    |        |説明書      |        
 [31]|      |      |    |        |などの      |        
 [32]|      |      |    |        |付属文書は  |        
 [33]|      |      |    |        |別梱包で    |        
 [34]|      |      |    |        |同時に      |        
 [35]|      |      |    |        |送って      |        
 [36]|      |      |    |        |ください。  |        
 [37]|      |      |    |        |よろしく    |        
 [38]|      |      |    |        |お願い      |        
 [39]|      |      |    |        |いたします。|        
 [40]|      |      |    |        |以上        |        

 こんなようなデータをいくつもセットして実行しましたが、こちらでは エラーなく処理されます。

 ★もっとも、上記データの場合、行の高さの制限があり、説明書 などの あたりまでしか表示されません。
  (実際にセルの中には、もちろん、その下の文字も入っていますが)

  以下のような制限があるようですね。(546ピクセルが最大)

http://www.koikikukan.com/archives/2014/05/28-013333.php

(β) 2017/04/14(金) 19:51


βさん

有り難うございます。
行の高さやピクセルですか…。なかなか難しいですね。

現状は、たくさんの行を取り込もうとして、「型が一致しません。」
エラーが出た場合、一行ずつ空白行を挿入→マクロを動かす。→
エラーが出なければ、次にいくと言う感じで、とにかく空白行を
挿入すれば、問題なく動く状態なので、なんでそうなってしまうのか?
空白行が必要な上下のセルの文字を確認したりして、原因を探そうと
思います。
(変な話ですが、結合を必要としない、1行の行の上下に空白列を挿入
すると、うまく動いたり…、きっと何か理由があると思うのですが、
難しいです。)

また、何かありましたら、ご相談をさせて頂きたいと思います。
本当に有り難うございます。

明日も、色々と試してみたいと思います。
(Nomu) 2017/04/16(日) 22:55


βさん

いつもお世話になります。
この件、色々と有り難うございました。
正直、いまだに上手くいっておりませんが、マクロの勉強をするには
良い機会だと考え、引き続き頑張りたいと思います。

そして、宜しければ、一つお伺いしたいのですが、以下のようなケー
スの場合も、「型が一致しません。」エラーが出てしまうのですが、
何が問題なのでしょうか?

実際、以下の6行のデータで試しましたが、エラーになり、途中に
空白行を挿入すると、問題無く動きました。

  A           B          C      D          E              F
1ケース番号  問合内容1   問合内容2 問合内容3     回答         その他
2CDO128732 料金を知りたい 納期確認 品質確認  グループホーム※     特になし
                                    2軒と3月末に※
                                    1件完成予定※
3                                   現在も検討中
4CDO128909 納期を知りたい 料金確認 品質確認  ◎グレープフルーツ◎  特になし
5                                  ■アップ提案出来なかった
6                                  ■不可理由。対象外の進捗確認
(→※の文字は、3つとも、E2セルに入っています。このサイトで上手く書けないので、分割して書きました。)

この様な形のフォーマット形式の場合は、教えて頂いたマクロは使えないのでしょうか。でも…、同じデータ利用頂いて、βさんの環境で、問題無い場合、何かこちらのパソコンの問題なのか?とかいろいろと気になります。

お時間の良い時で構わないので、ご確認頂けますと、幸いです。

(nomu) 2017/04/23(日) 22:20


 もしかして、エラーになっていたのは、今回アップされたようなデータでしたか??

 そりゃぁ、エラーになります。
 マクロが想定していない形式のデータですから。

 もっとも、マクロが想定していないデータがあれば、エラーではなく、メッセージを出して処理打ち切りぐらい
 手当てすべきでしたかね。 そういう意味では手を抜いています。

 今までの説明で、E列のセルが、セル内改行になっている ということは聞かされていなかったので。

( β) 2017/04/23(日) 22:32


 まぁ、気を取り直して。

 Sub Sample2()
    Dim r As Range
    Dim a As Range
    Dim c As Range

    On Error Resume Next
    Set r = Range("A1").CurrentRegion.Columns(1).SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0

    If r Is Nothing Then Exit Sub

    For Each a In r.Areas
        With a.Cells(1).Offset(-1, 4)
            For Each c In a.Offset(, 4)
                .Value = .Value & vbLf & c.Value
            Next
        End With
    Next

    r.EntireRow.Delete

 End Sub

( β) 2017/04/24(月) 00:58


βさん

お礼が遅くなりまして、申し訳ありませんでした。
ご質問をさせて頂きました件、無事に解決しました。
本当に色々と有り難うございました。
(Nomu) 2017/05/21(日) 12:11


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.