HohoPapa の回答履歴
- エクセルで成績順・均等の併存するグループ分け
エクセルを利用して、以下のようなグループ分けをしたいと考えています。 ・点数を基準にA、Bに分ける。 ・ただしAはA1、A2の2グループがあり、A該当者を名簿順にA1、A2、A1、A2と割り振っていきたい。 ・出来れば男女の数も揃えたいので、A該当者の男子の名簿順、女子の名簿順、と割り振りたい。 Bグループに関しては、IF関数を使って簡単に出来るのですが、A1、A2…のところをどうしたらよいか分かりません。 もちろん手入力ではなく関数またはVBAを使って自動化がしたいのです。 解決策分かる方いましたら、是非ご教授お願いいたします。
- ベストアンサー
- Excel(エクセル)
- tamahome55
- 回答数3
- IFとANDの組み合わせ
VBAで、条件を2つとも満たす場合について、 という式を作りたいと思っています。 ElseIf Cells(gyou + 1, 5).Value = 0 And Cells(gyou, 5).Value = 0 Then という式を作ったのですが、どこか誤りがありますか。 もし、上下のセルが「0」の場合・・・という式のつもりでしたが 機能しない、ということもありますし、そもそも、AND関数はエクセルの関数のためこのような使い方をしていいものか定かではありません。
- ベストアンサー
- Excel(エクセル)
- ayumcom
- 回答数3
- 分類ごとにページを分ける為の空行を入れる関数
Excelで次のようなことやりたいのですが、何を調べてもわかりませんでした。 「分類」「商品名」のデータがあります。 これを「分類」ごとに1ページあたり5行表示させ、分類が変わるごとに次のページに表示させる表を「関数」で作成したいのです。 (「改ページの挿入」やVBAは使用しません) 詳しくは図を御覧ください。 分類「A」が4個、「B」が5個、「C」が7個、「D」が3個あるとします。 最初の分類「A」は4行表示のあと、1行空行を空けて、6行目から分類「B」が始まります。 分類「B」は5個あるので、5行表示のあと、11行目から分類「C」が始まります。 分類「C」は7個あるので、7行表示のあと、3行空行を空けて、21行目から分類「D」が始まります。 分類「D」は3個あるので、3行表示させます。最後の分類のあとは特に何もしなくてOKですが2行空行を入れてもOKです。 どなたかおわかりの方がいらっしゃいましたらご教授のほど、よろしくお願い致します。
- ベストアンサー
- Excel(エクセル)
- kinkin947
- 回答数3
- 分類ごとにページを分ける為の空行を入れる関数
Excelで次のようなことやりたいのですが、何を調べてもわかりませんでした。 「分類」「商品名」のデータがあります。 これを「分類」ごとに1ページあたり5行表示させ、分類が変わるごとに次のページに表示させる表を「関数」で作成したいのです。 (「改ページの挿入」やVBAは使用しません) 詳しくは図を御覧ください。 分類「A」が4個、「B」が5個、「C」が7個、「D」が3個あるとします。 最初の分類「A」は4行表示のあと、1行空行を空けて、6行目から分類「B」が始まります。 分類「B」は5個あるので、5行表示のあと、11行目から分類「C」が始まります。 分類「C」は7個あるので、7行表示のあと、3行空行を空けて、21行目から分類「D」が始まります。 分類「D」は3個あるので、3行表示させます。最後の分類のあとは特に何もしなくてOKですが2行空行を入れてもOKです。 どなたかおわかりの方がいらっしゃいましたらご教授のほど、よろしくお願い致します。
- ベストアンサー
- Excel(エクセル)
- kinkin947
- 回答数3
- VBAがとまります。
フォルダ内の全てのエクセルデータを一つにまとめたいのですが、 下記を実行すると、『実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです。』のメッセージが出て先に進みません。対象のデータを開いて実行しても同様でした。 調べましたがよくわかりませんので、ご教示いただけませんでしょうか。 基本的なところかもしれませんが、よくわかりません。 どうぞよろしくお願いいたします。 ------------------------------------------------------- 'プログラム1|プログラム開始 Sub GetExcelDataInFolder() 'プログラム2|シート設定 Dim ws1 As Worksheet Set ws1 = ThisWorkbook.Worksheets("Sheet1") 'プログラム3|FileSystemObjectの設定 Dim fs As FileSystemObject Set fs = New FileSystemObject 'プログラム4|対象フォルダを取得 Dim myfolder As Folder Set myfolder = fs.GetFolder(ThisWorkbook.Path) 'プログラム5|対象フォルダ内の全ファイルを処理 Dim myfile As File For Each myfile In myfolder.Files 'プログラム6|拡張子が「xlsx」のファイルのみを処理 If fs.GetExtensionName(myfile) = "xlsx" Then 'プログラム7|フォルダ内のエクセルを開いてシートを設定 Dim wb As Workbook Set wb = Workbooks.Open(Filename:=myfile) Dim ws2 As Worksheet Set ws2 = wb.Worksheets(1) 'プログラム8|開いたエクセルの最終行を取得 Dim cmax As Long cmax = ws2.Range("A65536").End(xlUp).Row Debug.Print myfile.Name & "のcmax=" & cmax 'プログラム9|開いたエクセルのデータを転記 Dim i As Long For i = 2 To cmax Dim cmax1 As Long cmax1 = ws1.Range("A65536").End(xlUp).Row ws1.Range("A" & cmax1 + 1 & ":E" & cmax1 + 1).Value = ws2.Range("A" & i & ":E" & i).Value Next 'プログラム10|エクセルを閉じる wb.Close 'プログラム11|オブジェクト解放 Set ws2 = Nothing Set wb = Nothing End If Next 'プログラム12|エクセルを保存 ThisWorkbook.Save 'プログラム13|オブジェクト解放 Set myfolder = Nothing Set fs = Nothing 'プログラム14|プログラム終了
- 締切済み
- Visual Basic
- maiboutan1
- 回答数2
- VBAがとまります。
フォルダ内の全てのエクセルデータを一つにまとめたいのですが、 下記を実行すると、『実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです。』のメッセージが出て先に進みません。対象のデータを開いて実行しても同様でした。 調べましたがよくわかりませんので、ご教示いただけませんでしょうか。 基本的なところかもしれませんが、よくわかりません。 どうぞよろしくお願いいたします。 ------------------------------------------------------- 'プログラム1|プログラム開始 Sub GetExcelDataInFolder() 'プログラム2|シート設定 Dim ws1 As Worksheet Set ws1 = ThisWorkbook.Worksheets("Sheet1") 'プログラム3|FileSystemObjectの設定 Dim fs As FileSystemObject Set fs = New FileSystemObject 'プログラム4|対象フォルダを取得 Dim myfolder As Folder Set myfolder = fs.GetFolder(ThisWorkbook.Path) 'プログラム5|対象フォルダ内の全ファイルを処理 Dim myfile As File For Each myfile In myfolder.Files 'プログラム6|拡張子が「xlsx」のファイルのみを処理 If fs.GetExtensionName(myfile) = "xlsx" Then 'プログラム7|フォルダ内のエクセルを開いてシートを設定 Dim wb As Workbook Set wb = Workbooks.Open(Filename:=myfile) Dim ws2 As Worksheet Set ws2 = wb.Worksheets(1) 'プログラム8|開いたエクセルの最終行を取得 Dim cmax As Long cmax = ws2.Range("A65536").End(xlUp).Row Debug.Print myfile.Name & "のcmax=" & cmax 'プログラム9|開いたエクセルのデータを転記 Dim i As Long For i = 2 To cmax Dim cmax1 As Long cmax1 = ws1.Range("A65536").End(xlUp).Row ws1.Range("A" & cmax1 + 1 & ":E" & cmax1 + 1).Value = ws2.Range("A" & i & ":E" & i).Value Next 'プログラム10|エクセルを閉じる wb.Close 'プログラム11|オブジェクト解放 Set ws2 = Nothing Set wb = Nothing End If Next 'プログラム12|エクセルを保存 ThisWorkbook.Save 'プログラム13|オブジェクト解放 Set myfolder = Nothing Set fs = Nothing 'プログラム14|プログラム終了
- 締切済み
- Visual Basic
- maiboutan1
- 回答数2
- Excelで該当する番号に名前を返したい
Excelのデータに1001、1002、1003…などと個人のデータが入っていますが、紙ベース資料にしか1001がA子、1002がB子、1003がC子…ということがわかりません。Excel上で1001→A子、1002→B子、1003→C子というように名前を返したいのですがどんな方法がありますか?
- 締切済み
- Excel(エクセル)
- pusuta
- 回答数6
- エクセルの重複データ削除について
B列に重複している数値が3件あります。 1件のみ消して行は詰めない方法はありませんか データツールの重複データ削除をすると行が詰まってしまいます。 1件のみ表示し空白行にしたい。
- ベストアンサー
- Excel(エクセル)
- JANIKYA
- 回答数3
- 【Excel】オプションボタンで選択したら〇で囲む
ご教授ください。 エクセルにてオプションボタンで選択したら選択した項目に〇をつけたいです。 例 〇男 〇女 〇その他 (↑このオプションボタンをどれか選択) ――――――――― 男 ←丸で囲われる) 女 その他 集計ではなく〇で囲われた方を印刷して使用したいです。 マクロを使用するのかルールで表示させる事が可能なのかどのようなやり方がスムーズなのかたどり着けません。 よろしくお願いいたします
- ベストアンサー
- Excel(エクセル)
- sry938
- 回答数2
- 【困っています】VBA 追加処理の記述を教えてくだ
VBA 追加処理の記述を教えてください。 お世話になります。マクロの初心者です、稚拙な部分はご容赦ください。 下記マクロを実行すると、元データが複数のファイルに分割されます。 追加作業としては、①シートの保護 出来上がった全ファイルのシートは1つ(シート名:『Sheet1』のみ)のA列~H列とJ列は保護され『I列』と『K列』は 保護されない(PWは、【9753】)。かつオートフィルタ設定でオートフィルタの操作は可能。 ②ファイルの種類は、CSVでファイルを作成希望。 自動で作成したく(今は手動で毎週100件作成)、ご教示の程お願い致します。 下記に対象リンク先と記述を記します。 リンク先 https://www.helpforest.com/excel/emv_sample/ex100010.htm ------------------------------------------------------------------------------- SubSample() DimMacroBAsWorksheet'このブックのシート DimWb_DataAsWorkbook'1.分割元ブック DimWb_newAsWorkbook'分割データ保存ブック DimWsAsString'2.分割元シート名 DimPathAsString'3.分割データ保存先 DimC_GroupAsString'4.グループ対象列 DimGroupNameAsString'グループ名(ブック名) DimC_CopyAsString'5.コピーデータ右端列 DimYMDAsString'6.保存ブック日付の表示形式 DimPSWAsString'7.読み取りパスワード DimR_DataAsInteger'データの行番号 DimKoAsInteger'グループの件数 SetMacroB=ThisWorkbook.Worksheets(1)'このブックのシート SetWb_Data=Workbooks(MacroB.Range("C11").Value)'分割元のブック名 Ws=MacroB.Range("C12") Path=MacroB.Range("C13")&"\" C_Group=MacroB.Range("C14") C_Copy=MacroB.Range("C15") YMD=MacroB.Range("C16") PSW=MacroB.Range("C17") IfYMD=""Then YMD="" Else YMD=Format(Date,YMD) EndIf R_Data=2'データの開始行 Application.ScreenUpdating=False Do Wb_Data.Activate Worksheets(Ws).Range(Cells(1,1),Cells(1,C_Copy)).Copy'1行目の項目名コピー Workbooks.Add ActiveSheet.PasteRange("A1")'新規ブックに貼り付け SetWb_new=ActiveWorkbook Wb_Data.Activate GroupName=Cells(R_Data,C_Group) Ko=WorksheetFunction.CountIf(Columns(C_Group),GroupName)'グループの件数を算出 Range(Cells(R_Data,"A"),Cells(R_Data+Ko-1,C_Copy)).Copy'グループ件数分コピー Wb_new.Activate ActiveSheet.PasteRange("A2")'新規ブック項目の下に貼り付け ActiveSheet.Columns.AutoFit ActiveSheet.UsedRange.Borders.LineStyle=True Range("D2").Select ActiveWindow.FreezePanes=True DimmynameAsString'条件不明 IfActiveSheet.Range("A2")<>""Then myname=ActiveSheet.Range("A2") EndIf Wb_new.SaveAsFilename:=Path&GroupName&"注残納期回答依頼リスト"&YMD&".xlsx",_ Password:=PSW'指定したフォルダーに保存 Wb_new.Close R_Data=R_Data+Ko LoopWhileCells(R_Data,C_Group)<>"" MsgBox"完了!" Application.ScreenUpdating=True EndSub
- ベストアンサー
- Visual Basic
- maiboutan1
- 回答数3
- VBA IFとの組み合わせ
もし、こうだった場合は 文字列Aの前に「〇〇」という文字列を追加。 そうではないときは文字列Aのまま といったVBAを組みたいと思ったのですが IF関数と、あとは何を組み合わせればいいのでしょうか。 Text関数かと思いましたが、うまくいきません。
- 締切済み
- Excel(エクセル)
- ayumcom
- 回答数2
- エクセルで区域毎の履歴を作りたい。
お世話になります。 タイトルのとおり、エクセルで区域毎の履歴を作りたいのですが、 頭も技術も足りず、作業が進まない状況です。 皆さんの知恵をお貸しいただければと思い、投稿しました。 よろしくお願いいたします。 内容は、 添付ファイルのとおりの2つのエクセルデータがあります。 どちらもデータ行の数は1000以上あります。 実施したい作業は、左側の管理台帳のうち、大区域、枝番、小区域毎に作業履歴台帳の中から、「作業年、作業種、作業面積」を管理台帳の小区域面積セルの右横から左へ向けて、作業年の古いものから、「作業年、作業種、作業面積」を横並びにしたいというものです。 データが多いので、手作業では厳しい状況です。 良い方法があれば、ご教示ください。 よろしくお願いいたします。
- 締切済み
- Excel(エクセル)
- bambootake
- 回答数9
- VBA IFとの組み合わせ
もし、こうだった場合は 文字列Aの前に「〇〇」という文字列を追加。 そうではないときは文字列Aのまま といったVBAを組みたいと思ったのですが IF関数と、あとは何を組み合わせればいいのでしょうか。 Text関数かと思いましたが、うまくいきません。
- 締切済み
- Excel(エクセル)
- ayumcom
- 回答数2
- 特定の文字以外を入力すると別シートに表記する方法
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim StrRow As Long Dim TgtCol As Long Dim MaxRow As Long Dim ChgRow As Long Dim PutSh1 As Worksheet Dim PutSh2 As Worksheet Dim PutSh3 As Worksheet Dim PutCol As Long Dim PutRow As Long Dim ChgRng1 As Range Dim ChgRng2 As Range Dim ChgRng3 As Range StrRow = 5 MaxRow = 35 If Target.Count > 1 Then Exit Sub If Target.Value = "" Then Exit Sub Set PutSh1 = ThisWorkbook.Sheets("Sheet2") Set PutSh2 = ThisWorkbook.Sheets("Sheet3") Set PutSh3 = ThisWorkbook.Sheets("Sheet4") With ThisWorkbook.Sheets("Sheet1") Set ChgRng1 = Range(.Cells(StrRow, 3), .Cells(MaxRow, 3)) 'C列 Set ChgRng2 = Range(.Cells(StrRow, 5), .Cells(MaxRow, 5)) 'E列 Set ChgRng3 = Range(.Cells(StrRow, 7), .Cells(MaxRow, 7)) 'G列 End With ChgRow = Target.Row If Not Intersect(Target, ChgRng1) Is Nothing Then Target.Offset(0, -1).Value = Target.Offset(0, -1).Value + 1 DataPut PutSh1, ChgRow, Target.Value End If If Not Intersect(Target, ChgRng2) Is Nothing Then Target.Offset(0, -1).Value = Target.Offset(0, -1).Value + 1 DataPut PutSh2, ChgRow, Target.Value End If If Not Intersect(Target, ChgRng3) Is Nothing Then Target.Offset(0, -1).Value = Target.Offset(0, -1).Value + 1 DataPut PutSh3, ChgRow, Target.Value End If End Sub 以前質問させて頂いた内容で追加の質問です。 Sheet1の指定したセルに「ー(ハイフン)」の文字がある時は、Sheet2〜4に転送(表記)しない方法を追加する場合はどの様にすれば宜しいでしょうか?
- ベストアンサー
- Excel(エクセル)
- kxsst808
- 回答数2
- 特定の文字以外を入力すると別シートに表記する方法
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim StrRow As Long Dim TgtCol As Long Dim MaxRow As Long Dim ChgRow As Long Dim PutSh1 As Worksheet Dim PutSh2 As Worksheet Dim PutSh3 As Worksheet Dim PutCol As Long Dim PutRow As Long Dim ChgRng1 As Range Dim ChgRng2 As Range Dim ChgRng3 As Range StrRow = 5 MaxRow = 35 If Target.Count > 1 Then Exit Sub If Target.Value = "" Then Exit Sub Set PutSh1 = ThisWorkbook.Sheets("Sheet2") Set PutSh2 = ThisWorkbook.Sheets("Sheet3") Set PutSh3 = ThisWorkbook.Sheets("Sheet4") With ThisWorkbook.Sheets("Sheet1") Set ChgRng1 = Range(.Cells(StrRow, 3), .Cells(MaxRow, 3)) 'C列 Set ChgRng2 = Range(.Cells(StrRow, 5), .Cells(MaxRow, 5)) 'E列 Set ChgRng3 = Range(.Cells(StrRow, 7), .Cells(MaxRow, 7)) 'G列 End With ChgRow = Target.Row If Not Intersect(Target, ChgRng1) Is Nothing Then Target.Offset(0, -1).Value = Target.Offset(0, -1).Value + 1 DataPut PutSh1, ChgRow, Target.Value End If If Not Intersect(Target, ChgRng2) Is Nothing Then Target.Offset(0, -1).Value = Target.Offset(0, -1).Value + 1 DataPut PutSh2, ChgRow, Target.Value End If If Not Intersect(Target, ChgRng3) Is Nothing Then Target.Offset(0, -1).Value = Target.Offset(0, -1).Value + 1 DataPut PutSh3, ChgRow, Target.Value End If End Sub 以前質問させて頂いた内容で追加の質問です。 Sheet1の指定したセルに「ー(ハイフン)」の文字がある時は、Sheet2〜4に転送(表記)しない方法を追加する場合はどの様にすれば宜しいでしょうか?
- ベストアンサー
- Excel(エクセル)
- kxsst808
- 回答数2
- エクセルで区域毎の履歴を作りたい。
お世話になります。 タイトルのとおり、エクセルで区域毎の履歴を作りたいのですが、 頭も技術も足りず、作業が進まない状況です。 皆さんの知恵をお貸しいただければと思い、投稿しました。 よろしくお願いいたします。 内容は、 添付ファイルのとおりの2つのエクセルデータがあります。 どちらもデータ行の数は1000以上あります。 実施したい作業は、左側の管理台帳のうち、大区域、枝番、小区域毎に作業履歴台帳の中から、「作業年、作業種、作業面積」を管理台帳の小区域面積セルの右横から左へ向けて、作業年の古いものから、「作業年、作業種、作業面積」を横並びにしたいというものです。 データが多いので、手作業では厳しい状況です。 良い方法があれば、ご教示ください。 よろしくお願いいたします。
- 締切済み
- Excel(エクセル)
- bambootake
- 回答数9
- VBA チャートグラフの凡例 表示非表示
タイトルの通り、凡例の表示非表示を設定したいと考えています。 HasLegendプロパティで凡例のオンオフを切り替えられる事までは理解したのですが 例えばグラフに要素が10個あると凡例も10個表示されると思います。 しかし今回は10このあるうちの指定した3つのみの凡例を表示するというようなことをしたいのです。 オブジェクトウィンドウを確認してみましたがそれらしいプロパティは見当たらず... なにか方法があればご教授願います。 よろしくお願いします
- ベストアンサー
- Visual Basic
- sk8577
- 回答数2
- エクセルで区域毎の履歴を作りたい。
お世話になります。 タイトルのとおり、エクセルで区域毎の履歴を作りたいのですが、 頭も技術も足りず、作業が進まない状況です。 皆さんの知恵をお貸しいただければと思い、投稿しました。 よろしくお願いいたします。 内容は、 添付ファイルのとおりの2つのエクセルデータがあります。 どちらもデータ行の数は1000以上あります。 実施したい作業は、左側の管理台帳のうち、大区域、枝番、小区域毎に作業履歴台帳の中から、「作業年、作業種、作業面積」を管理台帳の小区域面積セルの右横から左へ向けて、作業年の古いものから、「作業年、作業種、作業面積」を横並びにしたいというものです。 データが多いので、手作業では厳しい状況です。 良い方法があれば、ご教示ください。 よろしくお願いいたします。
- 締切済み
- Excel(エクセル)
- bambootake
- 回答数9
- 【困っています】VBA 追加処理の記述を教えてくだ
VBA 追加処理の記述を教えてください。 お世話になります。マクロの初心者です、稚拙な部分はご容赦ください。 下記マクロを実行すると、元データが複数のファイルに分割されます。 追加作業としては、①シートの保護 出来上がった全ファイルのシートは1つ(シート名:『Sheet1』のみ)のA列~H列とJ列は保護され『I列』と『K列』は 保護されない(PWは、【9753】)。かつオートフィルタ設定でオートフィルタの操作は可能。 ②ファイルの種類は、CSVでファイルを作成希望。 自動で作成したく(今は手動で毎週100件作成)、ご教示の程お願い致します。 下記に対象リンク先と記述を記します。 リンク先 https://www.helpforest.com/excel/emv_sample/ex100010.htm ------------------------------------------------------------------------------- SubSample() DimMacroBAsWorksheet'このブックのシート DimWb_DataAsWorkbook'1.分割元ブック DimWb_newAsWorkbook'分割データ保存ブック DimWsAsString'2.分割元シート名 DimPathAsString'3.分割データ保存先 DimC_GroupAsString'4.グループ対象列 DimGroupNameAsString'グループ名(ブック名) DimC_CopyAsString'5.コピーデータ右端列 DimYMDAsString'6.保存ブック日付の表示形式 DimPSWAsString'7.読み取りパスワード DimR_DataAsInteger'データの行番号 DimKoAsInteger'グループの件数 SetMacroB=ThisWorkbook.Worksheets(1)'このブックのシート SetWb_Data=Workbooks(MacroB.Range("C11").Value)'分割元のブック名 Ws=MacroB.Range("C12") Path=MacroB.Range("C13")&"\" C_Group=MacroB.Range("C14") C_Copy=MacroB.Range("C15") YMD=MacroB.Range("C16") PSW=MacroB.Range("C17") IfYMD=""Then YMD="" Else YMD=Format(Date,YMD) EndIf R_Data=2'データの開始行 Application.ScreenUpdating=False Do Wb_Data.Activate Worksheets(Ws).Range(Cells(1,1),Cells(1,C_Copy)).Copy'1行目の項目名コピー Workbooks.Add ActiveSheet.PasteRange("A1")'新規ブックに貼り付け SetWb_new=ActiveWorkbook Wb_Data.Activate GroupName=Cells(R_Data,C_Group) Ko=WorksheetFunction.CountIf(Columns(C_Group),GroupName)'グループの件数を算出 Range(Cells(R_Data,"A"),Cells(R_Data+Ko-1,C_Copy)).Copy'グループ件数分コピー Wb_new.Activate ActiveSheet.PasteRange("A2")'新規ブック項目の下に貼り付け ActiveSheet.Columns.AutoFit ActiveSheet.UsedRange.Borders.LineStyle=True Range("D2").Select ActiveWindow.FreezePanes=True DimmynameAsString'条件不明 IfActiveSheet.Range("A2")<>""Then myname=ActiveSheet.Range("A2") EndIf Wb_new.SaveAsFilename:=Path&GroupName&"注残納期回答依頼リスト"&YMD&".xlsx",_ Password:=PSW'指定したフォルダーに保存 Wb_new.Close R_Data=R_Data+Ko LoopWhileCells(R_Data,C_Group)<>"" MsgBox"完了!" Application.ScreenUpdating=True EndSub
- ベストアンサー
- Visual Basic
- maiboutan1
- 回答数3
- 【困っています】VBA 追加処理の記述を教えてくだ
VBA 追加処理の記述を教えてください。 お世話になります。マクロの初心者です、稚拙な部分はご容赦ください。 下記マクロを実行すると、元データが複数のファイルに分割されます。 追加作業としては、①シートの保護 出来上がった全ファイルのシートは1つ(シート名:『Sheet1』のみ)のA列~H列とJ列は保護され『I列』と『K列』は 保護されない(PWは、【9753】)。かつオートフィルタ設定でオートフィルタの操作は可能。 ②ファイルの種類は、CSVでファイルを作成希望。 自動で作成したく(今は手動で毎週100件作成)、ご教示の程お願い致します。 下記に対象リンク先と記述を記します。 リンク先 https://www.helpforest.com/excel/emv_sample/ex100010.htm ------------------------------------------------------------------------------- SubSample() DimMacroBAsWorksheet'このブックのシート DimWb_DataAsWorkbook'1.分割元ブック DimWb_newAsWorkbook'分割データ保存ブック DimWsAsString'2.分割元シート名 DimPathAsString'3.分割データ保存先 DimC_GroupAsString'4.グループ対象列 DimGroupNameAsString'グループ名(ブック名) DimC_CopyAsString'5.コピーデータ右端列 DimYMDAsString'6.保存ブック日付の表示形式 DimPSWAsString'7.読み取りパスワード DimR_DataAsInteger'データの行番号 DimKoAsInteger'グループの件数 SetMacroB=ThisWorkbook.Worksheets(1)'このブックのシート SetWb_Data=Workbooks(MacroB.Range("C11").Value)'分割元のブック名 Ws=MacroB.Range("C12") Path=MacroB.Range("C13")&"\" C_Group=MacroB.Range("C14") C_Copy=MacroB.Range("C15") YMD=MacroB.Range("C16") PSW=MacroB.Range("C17") IfYMD=""Then YMD="" Else YMD=Format(Date,YMD) EndIf R_Data=2'データの開始行 Application.ScreenUpdating=False Do Wb_Data.Activate Worksheets(Ws).Range(Cells(1,1),Cells(1,C_Copy)).Copy'1行目の項目名コピー Workbooks.Add ActiveSheet.PasteRange("A1")'新規ブックに貼り付け SetWb_new=ActiveWorkbook Wb_Data.Activate GroupName=Cells(R_Data,C_Group) Ko=WorksheetFunction.CountIf(Columns(C_Group),GroupName)'グループの件数を算出 Range(Cells(R_Data,"A"),Cells(R_Data+Ko-1,C_Copy)).Copy'グループ件数分コピー Wb_new.Activate ActiveSheet.PasteRange("A2")'新規ブック項目の下に貼り付け ActiveSheet.Columns.AutoFit ActiveSheet.UsedRange.Borders.LineStyle=True Range("D2").Select ActiveWindow.FreezePanes=True DimmynameAsString'条件不明 IfActiveSheet.Range("A2")<>""Then myname=ActiveSheet.Range("A2") EndIf Wb_new.SaveAsFilename:=Path&GroupName&"注残納期回答依頼リスト"&YMD&".xlsx",_ Password:=PSW'指定したフォルダーに保存 Wb_new.Close R_Data=R_Data+Ko LoopWhileCells(R_Data,C_Group)<>"" MsgBox"完了!" Application.ScreenUpdating=True EndSub
- ベストアンサー
- Visual Basic
- maiboutan1
- 回答数3