Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 7全般 : Excel 2010)
複数ブックの同シートの同セルをつなぎ合わせて表示したい
投稿日時: 17/12/04 20:27:58
投稿者: m024240

よろしくお願いします。
 
次年度の行事予定を作っていて、ひな形を配布し、
20部署程度から行事を打ち込んだデータをもらおうと思います。
そのデーターを4月シートの1日の枠に「、」を挿入してまとめて(繋げて)いければと思います。
 
ブック1、4月シートに以下のように入っていた場合、
ブック2のC4セルも "、"& 等を使ってつなげて集約できないかと思っています。
良い方法を教えていただけないでしょうか?
 
行\列    A    B    C    D    E    
    日    曜日    行事    会議    備考
 4    1    日    あ1    きき1    し1
 5    2    月    い1    くく1    
 6    3    火    う1    (空) す1
 7    4    水    え1    けけ1    
 8    5    木    (空) ここ1    
 9    6    金    (空) (空)    せ2
10    7    土    お1    ささ1    
11    8    日    か1        そ5

回答
投稿日時: 17/12/04 21:14:46
投稿者: もこな2

一応、テンプレ的なところから。
「Q&A 掲示板ご利用上のお願い」の「禁止事項」に以下のようにあります。
コード制作依頼
「●●●を実行するようなマクロを作りたいのですが」「●●●をする方法を教えてください」といった、コード制作依頼ともとれるような質問はおやめください。
  
ですので、やりたいことだけ説明して丸投げするようなご質問ですと、なかなか回答が付きづらいと思われます。
 
さて、小言みたいなことだけ言ってもしょうがないので、アイデアというか、自分ならここを押さえてから考えるなぁというポイントを回答します。
 
【着手前に考えておくこと】
1.返してもらうブック名(予定表〇〇部.xlsなど)や数(重複して帰ってきたり、報告日すぎても返事がない場合どうするのか)固定か。
2.返してもらったブックを保存する場所は固定か。(コード中に書くのか、作業の都度選べるようにするのか)
3.シート名や順番を変えられる恐れがないか(ブックに1シートしか無いなら別にどうでもいいでしょうが)
 
【開発すべき基本仕様】
1.特定のフォルダのファイル一覧を取得する。
  (初めから処理対象の保存場所、ファイル名が決まっているなら省略可)
 
2.取得したファイル一覧から、処理対象のブックだけ取り出す。
  (フォルダに処理対象以外が入ってないければ省略可)
  (初めから処理対象のファイル名が決まっているなら省略可)
 
3.以下をループ処理
 @ブックを開く
 Aほしいところのデータがブランクでなければ、必要なところのセル値に追加する
 Bブックを閉じる
 
というところでしょうか。
初めて開発に取り組まれるのであれば、いきなり全体に取り組まれるのではなく、1行程ずつ分けて考えたほうがごんがらなくてよいかとおもいます。

回答
投稿日時: 17/12/04 22:28:56
投稿者: WinArrow
投稿者のウェブサイトに移動

串刺し計算ではなく、「串刺し文字列結合」のようなキーワードで検索すると
参考になるコードが収取できるかも?
 
中々、ズバリのものは、ないと思うので、参考にしてみてはいかがでしょうか?

投稿日時: 17/12/05 09:34:06
投稿者: m024240

もこな2 様
 
≫一応、テンプレ的なところから。
≫「Q&A 掲示板ご利用上のお願い」の「禁止事項」に以下のようにあります。
(略)
 
決して、「コードをください」というつもりではありませんでした。
もこな2 様が書いていただいた【着手前に考えておくこと】
【開発すべき基本仕様】等を教えていただきたかっのです。
 
とても考えが整理され、参考になりました。
ありがとうございました。
少しずつネットにあるコードを参考にさせていただきながら
作り上げていこうと思います。

投稿日時: 17/12/05 09:36:25
投稿者: m024240

WinArrow 様
 
≫串刺し計算ではなく、「串刺し文字列結合」のようなキーワードで検索すると
≫参考になるコードが収取できるかも?
 
ありがとうございます。
いくつか検索しました。
もこな2 様の助言も取り入れて、
少しずつ考えていこうと思います。

回答
投稿日時: 17/12/05 19:46:12
投稿者: もこな2

昨日はちょっときつい言い方をしてしまいすみませんでした。
 
さて、昨日のログを見てておもったんですが、C4に出力される内容ってどのブックというか、どの部署由来のものかって把握しなくて大丈夫なんでしょうか。最終的にまとまったものとしては必要なくても、たとえばどの部署の予定なの?って聞かれたら、最悪、全部署のファイルを手動で開いて確認することになってしまうような。。。。
 
私なら、集計用ブックのシートのF列以降に、各ブックのC列を貼り付けるような処理をして集計表っぽくして
から、ブック串刺し結合じゃ無くてセル範囲の内容をなんとか結合するようって方法をとるかもです。
 
さらに、集計表にするなら、見出し欄に部署名を書くでしょうから、ファイル名に部署名を入れた様式を配って、そのまま回収すれば、いちいちフォルダ内のファイルリストを取得する必要もないですね。(欲しいファイルは解っているわけですから)
 
整理するとこんな感じでは?
@ データが入っているフォルダのパスを取得する
A 見出し行(3行目?)のF列〜に入力されている部署名を配列として取得する
 
B @とAをつかってブックのフルパスを取得する
C 元データブックを開いて、該当する列にデータをコピー
D 元データブックを上書きせず閉じる
 
※B〜C をループ
 
Eなんとかして、F列以降の空白でないセルを結合する。
 
 
Eについて、ユーザー関数作ってみたので改良の参考にしてみてください。

Function 合体(合体範囲 As Range)
Dim buf As String
Dim i As Integer

'セルの数だけループ
For i = 1 To 合体範囲.Count
    With 合体範囲(i)
        If .Value <> "" Then buf = buf & .Value & "、"
    End With
Next i
合体 = Left(buf, Len(buf) - 1)
End Function

 
コード上からもワークシート上からもどちらからも呼び出せると思います。(シート上でしかテストしてませんが)

回答
投稿日時: 17/12/05 19:50:26
投稿者: もこな2

おまけです。
組み込みダイアログボックスを使って、ユーザーにフォルダを指定させる関数です。
 

Function フォルダ指定(ByRef タイトル As String)
'フォルダを指定するダイアログを開き、ユーザーが選択したフォルダのパスを取得。
    With Application.FileDialog(msoFileDialogFolderPicker)
       .Title = タイトル
        If .Show = True Then
            フォルダ指定 = .SelectedItems(1)
        End If
    End With
End Function

Sub テスト()
 Dim a As String
 a = フォルダ指定("フォルダを指定してください")
 MsgBox (a)
End Sub

トピックに返信