[[20201209212549]] 『「業務日報から個別のファイルへ転記させたい」[ax(きゃん) ページの最後に飛ぶ

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

 

『「業務日報から個別のファイルへ転記させたい」[さつまの梅酒.] について』(きゃん)

投稿
[[20061210122453]] 『業務日報から個別のファイルへ転記させたい』(さつまの梅酒.) 
について...

参考になりました。
できれば、上記のものを初心者でもわかるように解説付きだとより勉強になります。

また、その応用で下記の場合、以前のマクロにどのように変更したら
下記のようになるかお願いします。

【日誌】             *A3から個別へ移したいです。
  A   B   C   D   E
1 令和2年12月1日(セル結合) 
2 処遇、ヒヤリハット…
3 Gさん 内容
4 Hさん 内容
5

【Hさん】  *項目は後で自分で入れるとする。
  A     B   C   D   E
1 R2.12.1  項目 内容(日誌と同様)
2        項目 内容
3
4

このような場合で個別ファイルを閉じて使用する場合コードはどうなりますか?
初心者ですみません。

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


 回答ではありません。
 日誌では12月1日のHさんの「内容」は一つしかないのにHさんのブックには「内容」が二つありますが、
 実際にはどのデータをどこに転記すればいいのでしょうか。
 また、各ブックにはシートは一つしかないと考えていいのでしょうか。

 ちなみにリンク先のコードは、別ファイルを閉じたままで転記しているのではなく、
 実際には別ファイルを開いて転記し、その後そのファイルを閉じています。
 ただし、画面上には表示していないだけです。
  
(tora) 2020/12/09(水) 23:10

Taroさん、紛らわしくてすみません。

やりたいことは、日誌に書かれた日付、名前、内容を
同じフォルダ内にある各個人のファイルごとに
それぞれ転記し日付と内容をいれたいです。
ただし、Aは日付、Cは内容と1つあけたいのです。
Bは空白で、あとから手入力したいのです。

例えば日誌を入力する際、Hさんの内容が長すぎて一行では
治らなく二行目になってしまう場合も考えられます。
その際、次の行に改行するなどして続けたいのですが。
何かアドバイス等あると助かります。

また、個人のファイルはシート一つとして
考えてもらって構いません。

そうなんですね。勉強なります。
そのような表示をされないやり方でも構いません。
よろしくお願いします。

(きゃん) 2020/12/09(水) 23:29


 希望通りかどうか、とりあえず作ってみました。
  
Sub test()
  
    Dim namae As String                     'このシートA列の担当者の名前
    Dim naiyo As String                     'このシートの担当者ごとの内容
    Dim i As Long, n As Long, m As Long
    Dim lastRow As Long                     '担当者ブックのC列の最終行
    Dim lgs As Long                         'このシートの担当者ごとの内容の文字数
    Dim myPath As String                    'このブックのパス
    Dim tgtWs As Worksheet                  '書き込み対象のシート

    Application.ScreenUpdating = False      '画面の書き換えを停止する
    myPath = ThisWorkbook.Path & "\"
    lgs = 10                                '1セルに転記する内容の文字数を指定する(仮に10文字までとしている)

    With ThisWorkbook.Sheets("Sheet1")      'ここからEnd Withまでのあいだ、ThisWorkbook.Sheets("Sheet1")の記載を省略
                                            '省略した場合は . から記載する
        For i = 3 To .Cells(Rows.Count, "A").End(xlUp).Row                  'このシートのA列3行目から最終行まで繰り返し
            namae = .Cells(i, "A")                                          '担当者名をnamaeとする
            Workbooks.Open Filename:=myPath & namae & ".xlsx"               'mamae.xlsxファイルを開く。.xlsxは実際の拡張子に合わせる
            Set tgtWs = ActiveWorkbook.ActiveSheet                          '開いたファイルのアクティブシートをtgtWsとする
            lastRow = tgtWs.Cells(Rows.Count, "C").End(xlUp).Row            'tgtWsの最終行をlastrowとする
            tgtWs.Cells(lastRow + 1, "A").Value = .Range("A1").Value        'このシートのB列i列目をnaiyoとする
            naiyo = .Cells(i, "B").Value                                    'このシートのB列i列目をnaiyoとする
            n = Application.WorksheetFunction.RoundUp(Len(naiyo) / lgs, 0)  'naiyoを何行に分割するか計算して nに入れる
            For m = 1 To n                                                  'naiyoをlgs文字ずつに分割して最終セルの下に順に転記する
                tgtWs.Cells(lastRow + m, "C").Value = Mid(naiyo, lgs * m - lgs + 1, lgs)
            Next m
            ActiveWorkbook.Save         '担当者ごとのブックを上書きして保存する
            ActiveWorkbook.Close        '担当者ごとのブックを閉じる
        Next i                          'ここから For に戻って繰り返す
    End With                            'With ThisWorkbook.Sheets("Sheet1")はここまで有効 必ず記載すること

    Application.ScreenUpdating = True   '画面の書き換え停止を終了する。
      
End Sub

 日誌ブックと個人ごとのブックは同じフォルダに入れておく必要があります。
 個人名のブックが見つからないとエラーになります。
 コメントを入れてありますので、参考にして修正してください。
  
  
(tora) 2020/12/10(木) 13:13

toraさん、ありがとうございます。
早速、試してみました。ほぼ、思っている通りです。
あと、もう1つお願いしたいのは、

ファイル名【日誌】
シート名【sheet1】

     A            B           C          D
1 日付
2 処遇関係(セル結合)
3  Hさん      内容1
4            内容2        ※Hさんの内容が一行ではおさまらない場合、自動で改行したい  
5  Bさん      内容

という場合、先程の式では
B4のみ転記されませんでした。

例えば、Hさんの内容1でおさまらない場合、決められた文字数がくると
次に改行され、その文もA4に名前がなくても個別の担当者の内容に転記される
コード(式)はないのでしょうか?
先程のコメント付きの編集はとても分かりやすく助かりました。
ありがとうございます。

もし、可能であれば、また、式を作って頂きアドバイス付きで
ドコに式を入れたらよいか教えて頂けると助かります。
お手数お掛けしてすみません。

(きゃん) 2020/12/10(木) 15:35


 コメントの間違いも含めて一部訂正しました。
  
Sub test2()

    Dim namae As String                     'このシートA列の担当者の名前
    Dim naiyo As String                     'このシートの担当者ごとの内容
    Dim i As Long, n As Long, m As Long
    Dim lastRow As Long                     '担当者ブックのC列の最終行
    Dim lgs As Long                         '日誌シートの内容1件の文字数
    Dim myPath As String                    '日誌ブックのパス
    Dim tgtWs As Worksheet                  '書き込み対象のシート

    Application.ScreenUpdating = False      '画面の書き換えを停止する
    myPath = ThisWorkbook.Path & "\"
    lgs = 10                                '1セルに転記する内容の文字数を指定する(仮に10文字までとしている)

    With ThisWorkbook.Sheets("Sheet1")      'ここからEnd Withまでのあいだ、ThisWorkbook.Sheets("Sheet1")の記載を省略
                                            '省略した場合は . から記載する
        For i = 3 To .Cells(Rows.Count, "B").End(xlUp).Row                      'このシートのB列3行目から最終行まで繰り返し
            If .Cells(i, "A").Value <> "" Then
                namae = .Cells(i, "A")                                          '担当者名をnamaeとする
                Workbooks.Open Filename:=myPath & namae & ".xlsx"               'mamae.xlsxファイルを開く。.xlsxは実際の拡張子に合わせる
                Set tgtWs = ActiveWorkbook.ActiveSheet                          '開いたファイルのアクティブシートをtgtWsとする
            End If
            lastRow = tgtWs.Cells(Rows.Count, "C").End(xlUp).Row                'tgtWsの最終行をlastrowとする
            tgtWs.Cells(lastRow + 1, "A").Value = .Range("A1").Value            '
            naiyo = .Cells(i, "B").Value                                        '日誌シートのB列i列目をnaiyoとする
            n = Application.WorksheetFunction.RoundUp(Len(naiyo) / lgs, 0)      'naiyoを何行に分割するか計算して nに入れる
            For m = 1 To n                                                      'naiyoをlgs文字ずつに分割して最終セルの下に順に転記する
                tgtWs.Cells(lastRow + m, "C").Value = Mid(naiyo, lgs * m - lgs + 1, lgs)
            Next m
        Next i                                                                  'ここから For に戻って繰り返す
    End With                                                                    'With ThisWorkbook.Sheets("Sheet1")はここまで有効 必ず記載すること
    For i = 1 To Workbooks.Count                            '開いているすべてのブックに対して処理を行う
        If ActiveWorkbook.Name <> ThisWorkbook.Name Then    '日誌ブック以外がアクティブだったら
            ActiveWorkbook.Save                             'アクティブなブックを上書きして保存する
            ActiveWorkbook.Close                            'アクティブなブックを閉じる
        End If
    Next i

    Application.ScreenUpdating = True   '画面の書き換え停止を終了する。
      
End Sub

 開いたブックはあとでまとめて閉じています。
 実行前に他のエクセルを開いていると勝手に上書き保存して閉じますので
 実行時は他のファイルを開かないでください。
  
(tora) 2020/12/10(木) 18:27

toraさん、ありがとうございます。
式を入力しまして、できました。

日誌の内容は文字の入力制限をかけ
改行の対応したいと思います。

あと、2点ほどできると完璧なのですが、、、
大変注文が多くで申し訳ございません。

私が頼んだ上記の内容の続きとしてとらえていただけたらと
思います。うまく、伝えたいことが伝わらなくすみません。

さっそくですが、

お願い1
現在、頂いた式を入れると
日誌から個別に転記されると以下のようになります。

例1)
ファイル名【日誌】
シート名【sheet1】
  A    B    C    D    E
1 2020.12.1
2 処遇(Bとセル結合)
3 Hさん  内容1(入力文字制限20文字)
4      内容2   *内容1で入りきらなければ内容2へ移動し入力。
5      内容3
6 Bさん  内容
  
  ↓転記

ファイル名【Hさん】
シート名【個別】
  A     B     C     D     E
1 2020.12.1 内容1 *自動で転記され内容1〜3が自動入力される(B列は文字制限あり、超えると自動で改行される)。
2 2020.12.1  内容2
3 2020.12.1 内容3 
4  .
5  .

となりますが、日付はA1だけにすることはできますか?
同じ日にA2・A3と同じ12月1日が入力されると少し見づらかったのです。

お願い2
上記に書かれているものの続きとして考えて頂きたい。

【日誌】
   A      B     C     D
1 2020.12.1
2 日中の処遇(Bとセル結合)
3 Hさん    内容1
4        内容2 
5 Bさん    内容1
6 Hさん    内容3
7 夜間の処遇(Bとセル結合)
8 Hさん    内容4
9 Cさん    内容1
10       内容2

このように場合、A7の見出しの項目でさえぎってしまった場合、どのような式になりますか。
それとも、その夜間の処遇を入力する場合、個別に転記されずにするにはどうしたらとよいでしょう?
例えば、転記するのをA3〜A6とA8〜A10までと分かりやすく区切ったりするコード(式)はないのでしょうか?

アドバイス等お願いします。
また明日、日中拝見させていただき、施行させて頂きたいと思います。
大変、初心者には難易度が高く日々勉強になってばかりです。
お力添えをお願い致します。

(きゃん) 2020/12/10(木) 20:49


  
Sub test3()

    Dim namae As String                     'このシートA列の担当者の名前
    Dim naiyo As String                     'このシートの担当者ごとの内容
    Dim i As Long, n As Long, m As Long
    Dim lastRow As Long                     '担当者ブックのC列の最終行
    Dim lgs As Long                         '日誌シートの内容1件の文字数
    Dim myPath As String                    '日誌ブックのパス
    Dim tgtWs As Worksheet                  '書き込み対象のシート
    Dim wb As Workbook

    Application.ScreenUpdating = False      '画面の書き換えを停止する
    myPath = ThisWorkbook.Path & "\"
    lgs = 20                                '1セルに転記する内容の文字数を指定する(仮に20文字までとしている)

    With ThisWorkbook.Sheets("Sheet1")      'ここからEnd Withまでのあいだ、ThisWorkbook.Sheets("Sheet1")の記載を省略
                                            '省略した場合は . から記載する
        For i = 3 To .Cells(Rows.Count, "B").End(xlUp).Row                      'このシートのB列3行目から最終行まで繰り返し
            If .Cells(i, "A").Value <> "" And .Cells(i, "B").Value <> "" Then
                namae = .Cells(i, "A")                                          '担当者名をnamaeとする
                On Error Resume Next                                            'エラーが発生したら無視して次の処理に移る
                Open myPath & namae & ".xlsx" For Append As #1                  '担当者ファイルを開く。すでに開かれていたらエラーとなる
                Close #1                                                        'そのファイルを閉じる
                On Error GoTo 0                                                 'エラーを無視する命令を中止する
                If Err.Number > 0 Then                                          '前の処理でエラーが発生していた場合(すでにファイルが開かれていた場合)
                    Set tgtWs = Workbooks(namae & ".xlsx ").Sheets(1)           'そのファイルの先頭のシートをtgtWsとする
                Else
                    Workbooks.Open Filename:=myPath & namae & ".xlsx"           'mamae.xlsxファイルを開く。.xlsxは実際の拡張子に合わせる
                    Set tgtWs = ActiveWorkbook.Sheets(1)                        '開いたいたファイルの先頭のシートをtgtWsとする
                End If
            End If
            lastRow = tgtWs.Cells(Rows.Count, "C").End(xlUp).Row                'tgtWsのC列の最終行をlastrowとする
            If tgtWs.Cells(Rows.Count, "A").End(xlUp).Value <> .Range("A1").Value Then    '日付がまだ転記されていなければ転記する
                tgtWs.Cells(lastRow + 1, "A").Value = .Range("A1").Value
            End If
            naiyo = .Cells(i, "B").Value                                        '日誌シートのB列i列目をnaiyoとする
            n = Application.WorksheetFunction.RoundUp(Len(naiyo) / lgs, 0)      'naiyoを何行に分割するか計算して nに入れる
            For m = 1 To n                                                      'naiyoをlgs文字ずつに分割して最終セルの下に順に転記する
                tgtWs.Cells(lastRow + m, "C").Value = Mid(naiyo, lgs * m - lgs + 1, lgs)
            Next m
        Next i                                                                  'ここから For に戻って繰り返す
    End With                                                                    'With ThisWorkbook.Sheets("Sheet1")はここまで有効 必ず記載すること
    For Each wb In Workbooks
        If wb.Name <> ThisWorkbook.Name Then wb.Save: wb.Close                  'このブック以外のすべてのブックを保存して閉じる
    Next

    Application.ScreenUpdating = True   '画面の書き換え停止を終了する。
        
End Sub

 次々と条件を後出しされるような質問はこのサイトでは嫌われるようです。
 まあ、私の場合は教えるというより自分で勉強しながら楽しんで作っていますからご心配はいりませんが。

 それはともかくご質問の内容を反映できるように修正してみました。
 どこをどう直したかの解説は省略しますので、全部新しいものに入れ替えてください。

 ご不明の点があればまたご質問ください。。
  
(tora) 2020/12/11(金) 10:09

 横から失礼します。

 施行の前に思考して試行したほうがいいと思います。
(通りすがり) 2020/12/11(金) 11:10

toraさん、ありがとうございます。
たしかに、お願いした通りの書式であれば
その通りになりました。
マクロを甘く見ていました。すみません。
式は少しいじれると今まで思ってて
行数とかを増やしたり減らしたり簡単に初心者でも
できると思っていじりましたがエラーがすぐにでました。

通りすがりの方からもアドバイスがあったように
式をお願いするにあたり、しっかり考えてから
お願いしたほうがいいことを痛感いたしました。
ほんとごめんなさい。

頼みすぎてしまったので
(きゃん) 2020/12/11(金) 14:24


 少なくとも私のことは気にしなくていいです。
 私も深い知識がなく、試行錯誤しながら回答しています。
 VBAに造詣の深い人から見れば稚拙なコードかもしれません。
 私自身がこのサイトで回答することで勉強させていただいています。
 その意味で、ここは私にとってのエクセルの学校です。
  
(tora) 2020/12/11(金) 16:01

toraさん、本当にありがとうございます。
助かります。反省しちゃんと書式を考えました。

お言葉に甘えて
本当に最後のお願いになります。
今までの延長になるかと思います。
難易度は増してしまうかもしれません。
すみません。

それでは。初めに準備で
1つのフォルダを用意します。
その中に、ファイル名【日誌】と
ファイル名【担当者名】をフルネームで用意します。
担当者名のファイルは、だいたい75名分バラバラに
用意する予定です。

ファイル名【担当者名】の書式は、75名全て同じです。
詳細は以下の通りです。
sheet1を『個別』という名前に書き換えます。
行幅は全て0.77cm。1ページに34行入ります。
1行目A列に『日付』を中央に入力(列幅2.22cm)、
1行目B列に『項目』を中央に入力(列幅1.8cm)、
1行目C列に『記事』を中央に入力(列幅13.49)、
フォントは11。『記事』の文字数は33文字数まで入力したいです。
2行目から34行目まで、A列にR2.12.1(日にち)、B列に空欄、
C列に記事の内容が入ります。2枚目以降も、必ずページ1番上に
日付、項目、記事という言葉が入ります。
ちなみに、2ページ目は35行に日付、項目、記事が入れたいです。
式で自動で日付、項目、記事が入ると嬉しいです。

続いて
ファイル名【日誌】の書式は、
sheet1を『日誌』という名前に書き換えます。
1行目から3行目までは、行幅はそれぞれ0.69cm
4行目以降の行幅は全て0.77cmに設定します。
それで、AB列2行とAB列3行はセル結合します。
結合した所に『令和2年12月1日』の日付を手入力します。
A19からA36とA38からA45、A48からA62、A73からA106、
A108からA141は、『担当者名』がフルネームで入ります(A列幅3.12cm)。
その右に『記事』が入ります。記事は、一行では収まらない場合があり、
二行目以降になることもあります。そのような場合、二行目以降の担当者名
は入力しない方が見やすいので空欄でお願いしたいです。
先程のAの範囲内で、名前が2回、3回、4回と使われる事もあります。
また、B19からB36とB38からB45、B48からB62、B73からB106、
B108からB141は、『記事』を書きます。記事は、担当者の記事になります。
ちなみにBは、CDEFGHIとセル結合しています。
それぞれの列幅、Bは1.67cm、Cは1.93cm、Dは1.93cm、
Eは1.67cm、Fは1.67cm、Gは1.67cm、Hは1.67cm、Iは1.75cmです。
合計13.96cmになります(担当者名と記事のフォントは11)。
記事は34文字数かけますが33文字数に入力制限します。

このような書式の中で、お願いしたいこと
ファイル名【日誌】のAB19からAB36とAB38からAB45、
AB48からAB62、AB73からAB106、AB108からAB141
の範囲内で担当者名とその記事(一行または、それ以上)、
手入力された際に、それぞれの担当者ごとのファイルに
日付(R2.12.1のような表示)と記事が自動転記されるようにして
頂きたいです。日付は1回入力されたら、以後表示は
されなくて大丈夫です。
転記された記事は33文字数超えると2行目に移るなど
して頂けると助かります。
日誌と担当者のファイル拡張子は.xlsmにします。

以上です。
長々と書いてしまいすみません。
これで書式も正確に伝え、お願いしたいことも
正確に言えたのでもう大丈夫です。

本当にtoraさんには色々と
お世話になりました。
優しい方にお会いできて良かったです。
ありがとうございます。
お手間、迷惑をお掛けしてすみません。
本当にこれが最後になりますので、
どうか、お願いします。

何か不明な事があれば遠慮なくお願いします。

(きゃん) 2020/12/11(金) 20:27


 >B19からB36とB38からB45、B48からB62、B73からB106、
 >B108からB141は、『記事』

 とありますが、記事のない行はどうなっていますか?
 前回はそこが空白だとしていたのでその行を飛ばしていましたが、
 何かそこを飛ばすための手掛かりはありませんか。(B列ではなくA列とかC列にでもいいです)
(tora) 2020/12/11(金) 21:57

 あと、
 >『記事』の文字数は33文字数まで入力したいです。

 >記事は34文字数かけますが33文字数に入力制限します。
 >転記された記事は33文字数超えると2行目に移るなど・・

 最初から記事の文字数をデータの入力規則で制限していれば
 33文字を超えることはあり得ないですけど。

 または、記事の文字数を34文字までにするとかできませんか。
 もし34文字入力されて1文字だけ次の行に移るのは見栄えもよくないですよね。
  
(tora) 2020/12/11(金) 22:32

早速、返信ありがとうございます。

記事のない、B18までや、B46からB47、B63からB72、B107
には、それぞれ一行丸々セル結合(AからI)して見出しや処遇の
人数等を入力しようと思っています。できたら、その上の
行範囲を飛ばしてもらえると助かります。
この返答でtoraさんの質問に答えられていますか?
違ったら、言ってください。

確かにtoraさんの言う通りですね。
日誌の文字数は34文字数までに制限し
担当者のファイルを34文字入れられるように
列幅を増やしてみます。

(きゃん) 2020/12/11(金) 22:52


toraさん
それと、その【日誌】から
各【担当者】のファイルへ
自動転記する際に、以前の
ようにファイル開いている
のだけども、表示されず
転記するやり方で転記して
もらえると、嬉しいです。

わがまますみません。
(きゃん) 2020/12/11(金) 23:12


 ご質問の内容を踏まえてコードを修正しました。

 1.行の高さ・幅、フォント、データが中央寄せになっているといった情報がありますが、
   データを転記するだけですからそのことは考慮する必要はありません。

 2.拡張子は .xlsm ということですが、担当者ブックになんらかのマクロを記載するのであればその通りですが、
   そうでなければ担当者のファイルは .xlsm にする必要はありません。
   提示したコードでは xlsx としてあります。
   もし必要があって .xlsm にするのであれば修正してください。(2箇所あります)

 3.担当者ブックの名前はフルネームでもいいですけど、日誌のA列の名前と完全一致が条件です。

 4.シートは一つしかないのであれは前に提示したコードでいいですが、
   今回「個別」というシート名にするということですからその名前を指定してあります。
   この場合、担当者ファイルに複数のシートがあっても正常に動きますが、その名前のシートがないとerrorになります。
   どちらがいいかはそちらで判断してください。

 5.日誌ブックの日付欄は、A2:B3 セルを結合してそこに入力されていると解釈しています。
   日付はシリアル値で入力されているものとします。

 6.前回までは日誌ブックの記事の文字数を考慮して、一定以上の文字数は事業のセルに表示することとしていましたが、
   今回は文字数を限定するということで、それは考慮していません。
   セルの文字数はチェックせず転記します。
   34文字に制限ということはあらかじめ日誌ファイルで設定しておいてください。

 7.転記する記事は、B19からB36、B38からB45、B48からB62、B73からB106、B108からB141、のみを対象としています。
   その範囲で空白でないデータを転記します。
   空白に見えてもスペースなどが入っていると空白ではないとみなして空白を転記します。

 以上を踏まえて次のコードを実行(テスト)してみてください。
  
Sub test4()
'
    Dim namae As String                     'このシートA列の担当者の名前
    Dim lastRow As Long                     '担当者ブックのC列の最終行
    Dim myPath As String                    '日誌ブックのパス
    Dim tgtWs As Worksheet                  '書き込み対象のシート
    Dim wb As Workbook
    Dim myR As Range, r As Range
    Dim hizuke As Date
'
    Application.ScreenUpdating = False      '画面の書き換えを停止する
    myPath = ThisWorkbook.Path & "\"
    With Sheets("日誌")
        hizuke = Range("A2").Value
        Set myR = Union(.Range("B19:B36"), .Range("B38:B45"), .Range("B48:B62"), .Range("B73:B106"), .Range("B108:B141"))
    End With
'
    For Each r In myR
        If r.Value <> "" Then                                                   'rセルが空白でない場合に以下のコードを実行する
            If r.Offset(0, -1).Value <> "" Then namae = r.Offset(0, -1).Value   'rの左セルが空白でなければそのセルの値をnamaeとする。
            On Error Resume Next                                                'エラーが発生したら無視して次の処理に移る
            Open myPath & namae & ".xlsx" For Append As #1                      '担当者ファイルを開く。すでに開かれていたらエラーとなる
            Close #1                                                            'そのファイルを閉じる
            On Error GoTo 0                                                     'エラーを無視する命令を中止する
            If Err.Number > 0 Then                                              '前の処理でエラーが発生していた場合(すでにファイルが開かれていた場合)
                Set tgtWs = Workbooks(namae & ".xlsx ").Sheets("個別")          '名前ブックの個別シートをtgtWsとする
            Else
                Workbooks.Open Filename:=myPath & namae & ".xlsx"               'そうじゃ場合mamae.xlsxファイルを開く。
                Set tgtWs = ActiveWorkbook.Sheets("個別")                       '開いたの個別シートをtgtWsとする
            End If
            lastRow = tgtWs.Cells(Rows.Count, "C").End(xlUp).Row                'tgtWsのC列の最終行をlastrowとする
            If tgtWs.Cells(Rows.Count, "A").End(xlUp).Value <> hizuke Then      '日付がまだ転記されていなければ転記する
                tgtWs.Cells(lastRow + 1, "A").Value = hizuke
            End If
            tgtWs.Cells(lastRow + 1, "C").Value = r.Value                       '日誌ファイルの記事を個別ファイルに転記する
        End If
    Next
'
    For Each wb In Workbooks
        If wb.Name <> ThisWorkbook.Name Then wb.Save: wb.Close                  'このブック以外のすべてのブックを保存して閉じる
    Next
'
    Application.ScreenUpdating = True   '画面の書き換え停止を終了する。
'
End Sub
  
(tora) 2020/12/12(土) 15:33

toraさん、ありがとうございます。
分かりやすい説明に、コード(式)を
作って頂き、本当にありがとうございます。
作って頂いたコードは、明日午前に
試行してみたいと思います。
結果は、午前中に報告致します。

(きゃん) 2020/12/12(土) 17:14


toraさん、ありがとうございます。

たくさん頼んでしまったため、
toraさんが分かりずらいなか、
やって頂いて大変助かっています。
すみませんが一部修正をお願いし
たいのですが11日の20時に
送った文で言葉足らずだった
みたいで、申し訳ないです。

修正部分は、
ファイル名【担当者名】
sheet名【個別】、1ページ目は、
1行目にはA1に『日付』、
B1に『項目』、C1に『記事』
という言葉が入ります。
その2ページ目は35行目にも
日付、項目、記事の
3つを自動で入力をできるように
してもらえたらと。
つまり、【日誌】から【個別】
へ転記された際、
ページの1番上の行には
3つの言葉が自動で記入されるように
お願いしたいのです。
2ページ目以降の一番上の行は、
35行目、69行目、108行目、
147行目・・・になります。
必ず左から
『日付』『項目』『記事』という
文字数が入るようにして貰えると
嬉しいです。
その3つ言葉の次の行に
3つの前の行の文の続きが
くるようにしてもらえると
助かります。

もし、出来ないようであれば、
大丈夫です。

(きゃん) 2020/12/13(日) 11:09


できれば、
ページ一番上の行と二行目の間は
セルの書式設定で線スタイルに
ある二重線で区切って頂けると
尚良いのですが、できますか?
本当にすみません。
(きゃん) 2020/12/13(日) 11:17

 すみません、その質問について確認したつもりでいたんですが、
 確認漏れでした。

 1ページ目、2ページ目とあるのは、印刷したときのページ数のことですね。
 印刷のためであれば、一行目を印刷タイトルに設定すれば十分だと思います。
 二重線も最初から一行目だけに設定しておけばいいですし、
 シートの見た目もそのほうがすっきりします。

 途中に見出しを入れると、行を追加したり、行高を変えた場合はもちろんのこと、
 プリンタが変わっただけでも印刷行数が変わってレイアウトが崩れる場合があるのて、
 私なら見出しは先頭行だけにします。

 また、下の方にスクロールしたときに見出しが見えないというのであれば、
 ウィンドウ枠の固定を使えば問題ないですが、いかがですか。

 それでもVBAでできないかといえばできないこともないと思います。
 ちなみに、
 >2ページ目以降の一番上の行は、35行目、69行目、108行目、147行目・・・になります。

 これだと1ページ目と2ページ目は34行、3ページ目以降は39行になりますけど?
  
(tora) 2020/12/13(日) 13:23

そうですね。ありがとうございます。

今回、何も掲示板やExcelのことを
わからない、自分に親切にして
頂きありがとうございます。
何から何まで色々とやって頂いたり、
色々とご配慮頂き
ありがとうございました。
本当に感謝しています。

私にはできない技術を持っており
大変羨ましいです。
本当、素晴らしい。神です!!神!

toraさんのような優しい方に
作って頂き本当にありがたく思います。
これからも、ご活躍お祈り申し上げます。

(きゃん) 2020/12/13(日) 17:43


上記の式参考になりました。

マクロ書けるかたに質問です。
その最後に書かれている式にアレンジを
したいのですが、下記の変更はできますか?

例えば
日誌ファイルと個別のファイルの書式はそのままで、
日誌フォルダの中に、日誌ファイルと個別フォルダがあり、
個別フォルダの中に個別ファイルがあります。個別フォルダと
個別ファイルはそれぞれ、担当者の名前(フルネーム)になります。
日誌ファイルの中に書かれている内容を上記の式のように
担当者事に必要な箇所を名前ごとに自動的に転記できたらと思うのですが。

返事お待ちしております。
(幸子) 2021/02/12(金) 17:29


可能かとは思いますがどのあたりが不明なのか、
具体的な質問を新規でされた方が回答が付くと思います。

(名無し) 2021/02/12(金) 20:56


ありがとうございます。
(幸子) 2021/02/12(金) 21:35

コメント返信:

[ 一覧(最新更新順) ]


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