• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数ファイルデータを1つに纏めるチェックボックス有)

複数ファイルデータを1つに纏めるチェックボックス有

HohoPapaの回答

  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.2

チェックボックスの効率的な複写方法が別にあるのかもしれませんが 思いつかないので、チェックボックス以外を複写し 全数の複写が終わってから、チェックボックスをvbaで貼りつけました。 https://okwave.jp/qa/q10134520.htmlhttps://okwave.jp/qa/q10137420.html の継続です。 Option Explicit Const tgSheet = "Participant List" '入力側シート名 Const A_Title = "ファイル名(hgehogeID)" Const MyWidth = 8 'I,J,Kの列幅 Const CBoxWidth = 2  'チェックボックスの列幅 Const Yohaku = 16 Const RowHeight = 35 Dim BaseDir As String Dim HitFileCount As Long Dim PutBook As Workbook Dim RowCount As Long Sub sample()  Dim PutPass As String  Dim LastRow As Long  Dim r As Long  Dim c As Long    Dim StartX As Double  Dim StartY As Double  Dim EndX As Double  Dim EndY As Double    '元データ格納フォルダーを取得  With Application.FileDialog(msoFileDialogFolderPicker)   .Show   BaseDir = .SelectedItems(1)  End With  Set PutBook = Workbooks.Add  HitFileCount = 0  getFilesRecursive (BaseDir)    'チェックボックスを作成  LastRow = PutBook.Sheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).Row  PutBook.Sheets("Sheet1").Range("I:K").ColumnWidth = MyWidth  PutBook.Sheets("Sheet1").Rows("2:" & LastRow).RowHeight = RowHeight  For r = 2 To LastRow   For c = 9 To 11    With PutBook.Sheets("Sheet1").Cells(r, c)     StartX = .Left + Yohaku     StartY = .Top     EndX = CBoxWidth     EndY = .Height     PutBook.Sheets("Sheet1").CheckBoxes.Add(StartX, StartY, EndX, EndY).Select     Selection.Text = ""     Selection.Placement = xlMoveAndSize     If c = 9 Then      Selection.Value = PutBook.Sheets("Sheet1").Range("$Q$" & r)      Selection.LinkedCell = "$Q$" & r     ElseIf c = 10 Then      Selection.Value = PutBook.Sheets("Sheet1").Range("$R$" & r)      Selection.LinkedCell = "$R$" & r     ElseIf c = 11 Then      Selection.Value = PutBook.Sheets("Sheet1").Range("$S$" & r)      Selection.LinkedCell = "$S$" & r     End If    End With   Next c  Next r    'N列に計算式をセット  PutBook.Sheets("Sheet1").Range(Cells(2, 14), Cells(LastRow, 14)).FormulaR1C1 = _    "=IF(AND(RC[5]=TRUE,OR(RC[3]=TRUE,RC[4]=TRUE)),""合同設備等利用可能"",IF(RC[6]=TRUE,""合同設備等利用可能"",""内部運営管轄と相談下さい""))"    With Application.FileDialog(msoFileDialogSaveAs)   .Show   PutPass = .SelectedItems(1)   PutBook.SaveAs (PutPass)   PutBook.Close  End With  MsgBox Format(HitFileCount, "0") & "件のファイル処理終了" End Sub Sub getFilesRecursive(path As String)  Dim FSO As FileSystemObject: Set FSO = New FileSystemObject  Dim objFolder As folder  Dim objFile As file    For Each objFolder In FSO.GetFolder(path).SubFolders   getFilesRecursive objFolder.path  Next  For Each objFile In FSO.GetFolder(path).Files   If UCase(FSO.GetExtensionName(objFile.path)) = "XLSX" Then    execute objFile   End If  Next End Sub '取得したファイルのデータを取得して格納する Sub execute(f As file)  Dim GetBook As Workbook  Dim GetSheet As Worksheet  Dim FLastRow As Long  Dim TLastRow As Long  Dim r As Long    HitFileCount = HitFileCount + 1  'ファイルを開いてシートを取得  Set GetBook = Workbooks.Open(f.path)  Set GetSheet = GetBook.Sheets(tgSheet)    If HitFileCount = 1 Then   PutBook.Sheets("Sheet1").Range("B1:E1").Value = _    GetSheet.Range("B6:E6").Value   PutBook.Sheets("Sheet1").Range("F1").Value = _    GetSheet.Range("F5").Value   PutBook.Sheets("Sheet1").Range("G1:H1").Value = _    GetSheet.Range("G6:H6").Value   PutBook.Sheets("Sheet1").Range("I1:K1").Value = _    GetSheet.Range("I7:K7").Value   PutBook.Sheets("Sheet1").Range("N1").Value = _    GetSheet.Range("N6").Value   PutBook.Sheets("Sheet1").Range("A1").Value = A_Title   RowCount = 2  End If    '最終行を取得して、対象範囲を複写  FLastRow = GetSheet.Cells(Rows.Count, "B").End(xlUp).Row  TLastRow = PutBook.Sheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).Row + 1    PutBook.Sheets("Sheet1").Range("B" & TLastRow & ":K" & TLastRow + FLastRow - 8).Value = _   GetSheet.Range("B8:K" & FLastRow).Value  PutBook.Sheets("Sheet1").Range("O" & TLastRow & ":T" & TLastRow + FLastRow - 8).Formula = _   GetSheet.Range("O8:T" & FLastRow).Formula  PutBook.Sheets("Sheet1").Range("A" & TLastRow & ":A" & TLastRow + FLastRow - 8).Value = _   Mid(f.Name, 7, 8)    GetBook.Close End Sub

nnirosan
質問者

補足

早速のVBAのスクリプトのご教示、本当にありがとうございました。出力ファイルと入力ファイルを全て確認致しました。 入力ファイルの値は正常に出力ファイルに吐き出されておりました。チェックボックスの値も正常に入っておりました。 入力ファイルの非表示箇所を全て確認した所、 下記の設定になっている入力ファイルは29個中3個のみで、 N列=関数式『=IF(AND(S8=TRUE,OR(Q8=TRUE,R8=TRUE)),"合同設備等利用可能",IF(T8=TRUE,"合同設備等利用可能","内部運営管轄と相談下さい"))』が入っています。 非表示となっていたQ列、R列、S列、T列=8行目以降より『TRUE』、『FLASE』の文字入っています。 入力ファイルの29個中26個は、以下の設定になっておりました。 N列=関数式『=IF(AND(S8=TRUE,OR(Q8=TRUE,R8=TRUE)),"合同設備等利用可能",IF(U8=TRUE,"合同設備等利用可能","内部運営管轄と相談下さい"))』が入っています。 非表示となっていたQ列、R列、S列、U列=8行目以降より『TRUE』、『FLASE』の文字入っています。 しっかりと確認せずにご報告してしまいました。 大変お手数で恐縮なのですが、設定の多い方へ修正して頂けないでしょうか? スクリプト中でT8をU8への変更する場合の変更箇所等、ご教示頂けたら幸いです。 スクリプトの修正が済みましたら、400個の入力ファイルで本番のテストを実施する予定でおります。

関連するQ&A

  • 複数ファイルのデータを1つのファイルへ纏めるマクロ

    マクロの実行で、Excel形式の約400個のファイル中のデータを1つの出力ファイルへ纏める為のマクロを作成したいのですが、VBAの初心者で、スクリプトの書き方が分からず大変困っております。 入力ファイルの中身は頻繁に追加、削除を繰り返しており、そのたびに入力ファイルを目視確認後、出力ファイルを手動で修正している状況でございます。 大変お手数ですが、マクロがお分かりの方がいらっしゃいましたら、ご教示を宜しくお願い致します。 ・入力ファイルは、以下ような名前になっております。 課題参加者_23RF3001.xlsx 課題参加者_23RF3005.xlsx 課題参加者_23RF3072★.xlsx 課題参加者_23RF3073.xlsx 課題参加者_23RF3199.xlsx 課題参加者_23RF3543.xlsx ・入力ファイルのデータは、添付しました画面イメージの通りで、  フォーマットは全て同じです。 ・出力ファイルに吐き出す入力データはB列~K列とN列になります。 ・出力ファイルのタイトルは、1番目に呼び出したファイルのB列~K列とN列を使う。 ・出力ファイルのA列のデータは、入力ファイル名の『23RF3001』、『23RF3543』などを入力データ分入れる。 ・出力ファイルのタイトルに使う、入力ファイルのタイトルは以下のようになっています。   B列~E列のタイトルは、6行目、7行目が結合されたセルに入っています。  F列のタイトルは、5行目、6行目、7行目が結合したセルに入っています。  G列~H列のタイトルは、6行目、7行目が結合されたセルに入っています。  I列~K列のタイトルは、7行目のセルに入っています。  N列のタイトルは、6行目、7行目が結合されたセルに入っています。 ・出力ファイルへ吐き出したい、入力ファイルデータの範囲は、  B列~K列の8行目以降とN列の8行目以降のデータになりますが、  『職員番号』、『名前』、『部門』に記載が有る行のみを出力ファイルへ吐き出します。  N列はリストの最後の行まで文字が入力されていますが、  N列についても、上記の『職員番号』、『名前』、『部門』に記載が有る行のみを出力ファイルへ吐き出します。 ・出力データへ吐き出す時の書式フォーマットは以下の通りになります。  A列=文字形式  B列=数値形式  C列~F列=文字形式  G列、H列=日付形式  I列~K列=チェックボックス(フォームコントロール形式(入力データと同じ形式))  N列=文字形式 ・入力データは今の所50行まで入力可能としています。

  • 複数EXCELファイル中のデータを1つのファイルへ

    同じシート名、同じフォーマットで記載されている約400個のEXCELファイルから、『Participant List』というシート名のB列~H列、8行目~50行の範囲の記載を1つのEXCELファイルに纏めるVBAスクリプトを作成し実行したいのですが、VBAが全く分からず大変困っております。 マクロを実行した時に、入力ファイルと出力ファイルの保存ホルダーを聞いて指定出来るように出来た良いと思っています。 何方か、お分かりでしたらどうぞお力添えをお願いいたします。 <詳細> ・400個の入力EXCELファイルには、『Participant List』、『特定類型』の2つのシートが入っており、今回の入力用シートは『Participant List』になります。 ・今回抜き出したい記載は、『Participant List』シート中のB列~列、8行目~50行の範囲の記載になります。 ・『Participant List』シート中のB列の6行目と7行目のセルは結合しており、各列のタイトルは以下の通りになっています。  このタイトル名を出力ファイルの1行目へデータの各列のタイトルとして付けて、2行目以降より400個の入力ファイル中のデータを連結したいです。   B列:6,7行=『職員番号(nimsID)』     C列:6,7行=『名前(Name)』       D列:6,7行=『部門(Research Center, Division)』   E列:6,7行=『グループ(Group)』   F列:6,7行=『役職(Title)』   G列:6,7行=『開始年月(Start)』   H列:6,7行=『終了年月(End)』 ・出力ファイル名や出力のシート名は特に考えておりません。 ・入力データは以下ような記載のフォーマットになります。   B列=『職員番号(nimsID)』       例:14769     C列=『名前(Name)』         例:田中 一郎    D列=『部門(Research Center, Division)』 例:総合開発・情報部門   E列=『グループ(Group)』   例:科学リーダー   F列=『役職(Title)』     例:リーダ-   G列=『開始年月(Start)』  例:2023/5/1   H列=『終了年月(End)』   例:2023/5/31 ・入力ファイル名の例=科学登録者_23BB3001.xlsx            科学登録者_23BB3005.xlsx            科学登録者_23BB3405.xlsx ※拙い口足らずな説明となってしまいましたが、どうぞ宜しくお願い致します。

  • 複数のチェックボックスの値を書き込む方法

    複数行のチェックボックスの値をそのまま 書き込みたいのですが・・・ .datファイル↓ 1234,1 5678,0  3456,1 7890,0 上記をHTMLとして出力。 1→checkedで出力されるとします。 チェックを入れて、 7890,0 ↓ 7890,1 にするとそれを1行として保存されるようにしたい です。 チェックボックスは同じ名前のためform('check') などで値を取り出したとしても最後の値しか 値を取り出せないでしょう。 画面に複数出た行を全部.datファイルに書き込むには どうすればよいのでしょうか? http://www.futomi.com/lecture/form/cgi-pm.html ↑を参照しましたが、チェックの値は@配列で 取れるような気がしましたが、1行を書き込む 方法がわからないので詳しく教えていただければ 幸いです。 言葉だけよりソースがあるとわかりやすいですm(__)m

    • ベストアンサー
    • Perl
  • HTML チェックボックスで複数の値

    初心者です。 HTMLで下記のような計算ができるシートを作成しようと思っています。 表   A B C □ D E F □ G H I [計算] (□はチェックボックス) チェックボックスをチェックし、計算ボタンを押すと1行目(A,B,C)と選択したチェックボックスの行のそれぞれの列の値の割り算を行い、その結果を合計した数を表示させることを考えています。 チェックボックスをチェックすることでデータを一つ取り込むことはできたのですが、複数データ(列データ)を取り込む方法がよくわかりません。 ご存じの方教えていただけないでしょうか。 初心者ですので、実際のコードから教えて頂けるとありがたいです。 よろしくお願いします。 

  • エクセル チェックボックスの初期値を条件により変更したい。

    エクセル チェックボックスの初期値を条件により変更したい。 表題の質問をさせていただきます。 チェックボックスを20個あらかじめ配した以下のような表があります。 A列:社員ID (随時入力) B列:社員名 (VLOOKUPで表示) C列:チェックボックスを配置 D列:チェックボックスのリンクするセルに設定 チェックボックスの初期値は空欄(FALSE)にしています。 社員IDを入力した時に、連動してチェックボックスの値を「TRUE」にしてチェックを入れたいのです。 現在は社員ID入力後にチェックボックスをクリックしています。 よろしくお願いいたします。

  • アクセス チェックボックスについて

    チェックボックスやコンボボックスを使って入力するようにすると、フィールドに入力できるのが値だけになってしまいます。値でなく、選択した文字列を入力したいのですが、どうやったらいいのでしょうか?

  • エクセル2007・チェックボックス複数・条件書式

    教えてください 添付画像のようにA列17行目以降200人分のチェックボックスまでは作れたのですが、200行目まで一つ一つコントロールの書式設定からリンクするセルをG列にという作業で頭を抱えております。 他の方の質問も参照させていただきましたが、「マクロ」・「Visual Basic」などというものが全く分からない独学エクセル者です。事務や経理の業務とも程遠くただの個人商店の従業員です。専門的な回答をいただいても理解できる知識を持っておりません。 やりたい事は 200人分のチェックボックスにチェックを入れたときにそのお客様の行に色がついて商品のやり取りの終了を一目で解るようにしたいということなんです。 どなた様かお教えいただけませんでしょうか?

  • Excelでチェックボックスを使った列のコピー方法

    案件進捗表を作成しています。 進捗に応じて右へ右へとチェックボックスにチェックを入れていく形にしていて、 チェックボックスのとなりのセルに真偽の値を入れるように反映させています。 案件が増えるごとに、1,2,3行と・・とデータを増やしていきたいのですが、 1行目に作成した形式を下にコピーするとチェックボックスが全データ同じ動きをしてしまいます。 となりのセルに「TRUE」などを返すように反映させているチェックボックスはコピーできませんか? 教えてください。よろしくお願いします。

  • チェックボックスtableの行の複数選択

    jqueryをやっています。 始めて数週間です。 tableは一番左列がチェックボックスで、一番左列のヘッダ行がチェックボックスです。 やりたいことは、一番左の列にチェックボックスがあるtableをjqueryで操作して、 1.チェックボックス列以外の列をクリックしたときチェックボックスをONにする 2.チェックがついた行は背景色を変える 3.マウスオーバー中に1行ハイライト表示する 4.一番左のヘッダのチェックボックスONで全行の背景色を変える。 参考にしたサイトは以下のサイトです。 http://kachibito.net/snippets/table-tr-check ここはバグがあって一番左のチェックボックスはクリックしてもONになりません。 いろいろ調べて左列のチェックボックスONのとき、行クリックのイベントに行っているみたいです。 チェックONの行の背景色をつけたりもしたいのですが、よくわかりませんでした。 ヒントだけでも教えてもらえないでしょうか。 よろしくお願いします。

  • チェックボックスと条件付き書式について教えて下さい!

     B ....N       R    S   T 1          チェック     FALSE 2  表       チェック     TRUE 3          チェック     FALSE 4          チェック     TRUE  すみません。ちょっとわかりずらいですが、B列からN列までとある表があり、R列にチェックボックス、T列にリンクしています。 (R列のチェックひとつひとつのコントロール書式で$T$1と設定をシタ) ここまではなんとか出来たのですが、条件付き書式でチェックをつけた場合(T列がTRUEの場合)B1~N1に水色の塗りつぶしをしたいのですが、 そこがうまく行きません。 B1カラN1を範囲で選択して、数式がT1=TRUEにするとB1だけとかN1だけしか色がつかなかったので、$T$1=TRUEにしたらB1カラN1までうまく色がつきました。 でもこの表は170行くらいありまして…(・・;) $をつけるとパーっとコピーでは出来ないですよね。 チェックボックス作るだけで何時間もかかってしまったので、心が折れています。 独学でやっているので根本的な間違いがあるかもしれませんが、どなたか助けをお願します! ちなみに私のエクセルは2007で会社のほかの人のパソコンはすべて2003です。全員で共用する表です。