戻る  □一般操作のサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ
[ 最新記事及び返信フォームをトピックトップへ ]
このトピック参照回数 :
貼り付けの仕方

    [194891] 貼り付けの仕方-

    ■親トピック/記事引用/メール受信=OFF■

    □投稿者/ 慶次 -(2022/05/11(14:33))
    □U R L/

      お世話になっております。

      お時間ございます方,ぜひご教示ください。

      まずは,私が動かしたい内容を書かせていただきます。

      Sheet1:元データ
      Sheet2:転記用シート

      Sheet1にはA列からAS列までデータが入っています。その中の特定の情報だけを抜き出し,Sheet2に貼り付けたいと考えております。Sheet1で利用する特定の情報(列)は以下の通りです。

      E列:責任者の名前
      G列:責任者の部署

      V列:作業者1の名前
      W列:作業者1の部署
      X列:作業者2の名前
      Y列:作業者2の部署
      (この2列ごとのかたまりがAN列(作業者10の名前)とAO列(作業者10の部署)まであります)

      この情報をSheet2のB列に責任者名前および責任者部署を含む作業者名前と作業者部署を次のように表示させる書き方が全くわかりません。

      B2(1つのセル内)に次のように表示,部署は( )でくくる。

      責任者名前(部署) 改行
      作業者1名前(部署) 改行
      作業者2名前(部署) 改行




      ただしV列からの作業者数(もちろんそれに付随する部署数も)がデータ毎(行毎)に異なります。例えばですが,2行目に入っているデータでは責任者+作業者2名,3行目のデータは責任者+作業者5名,4行目のデータは責任者のみ,といった感じです。最大でも作業者は10名しかいません。

      できればコードを教えていただきたく存じます。




    [194892] Re[1]: 貼り付けの仕方-

    記事引用/メール受信=OFF■

    □投稿者/ kazuo -(2022/05/12(06:54))
    □U R L/
      Sub 文字列生成例()
          Dim xx() As String, s As String
          Dim i As Long, j As Long, o As Long
          Dim r As Range
          o = Range("v1").Column - Range("e1").Column '作業者の責任者からのオフセット
          With Worksheets("Sheet1")
              For Each r In .Range("e2", .Cells(.Rows.Count, "e").End(xlUp))
                  ReDim xx(0 To 10)
                  j = 0
                  xx(0) = r.Value & "(" & r.Offset(, 1).Value & ")"   '責任者名前(部署)
                  For i = 1 - 1 To 10 - 1                             '作業者1〜作業者10名前(部署)
                      If r.Offset(, o + i * 2).Value <> "" Then   '空白列はskip
                          j = j + 1
                          xx(j) = r.Offset(, o + i * 2).Value & "(" & r.Offset(, o + i * 2 + 1).Value & ")"
                      End If
                  Next
                  ReDim Preserve xx(0 To j)
                  s = Join(xx, vbCrLf)
                  Debug.Print s
              Next
          End With
      End Sub
      
      
      Win10 2016


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [194893] Re[2]: 貼り付けの仕方-

    記事引用/メール受信=OFF■

    □投稿者/ 慶次 -(2022/05/12(12:21))
    □U R L/
      kazuo様
      
      お世話になります。お忙しい中,ご教示頂きましてありがとうございます。一つのデータの動作確認ができたのですが,これをルールさせようと次のようにしてみたのですが,同じものが繰り返されてしまいます。データが30人分あると仮定して,どのようにループさせればよろしいのでしょうか。申し訳ございませんが,ご教示頂けますでしょうか。
      
                  ReDim Preserve xx(0 To j)
                  s = Join(xx, vbCrLf)
                  For k = 1 To 10
                      Worksheets("Sheet2").Range("B" & k).Value = s
                  Next k
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [194894] Re[3]: 貼り付けの仕方-

    記事引用/メール受信=OFF■

    □投稿者/ kazuo -(2022/05/12(14:26))
    □U R L/
      別に良いのですが、7年くらいVBAを経験している慶次さんですよね。
      
      Sub 回答例()
          Dim xx() As String, yy()
          Dim i As Long, j As Long, o As Long, k As Long
          Dim r As Range
          o = Range("v1").Column - Range("e1").Column '作業者の責任者からのオフセット
          With Worksheets("Sheet1")
              With .Range("e2", .Cells(.Rows.Count, "e").End(xlUp))
                  ReDim yy(1 To .Rows.Count, 0)
                  For Each r In .Cells
                      ReDim xx(0 To 10)
                      j = 0
                      xx(0) = r.Value & "(" & r.Offset(, 1).Value & ")"   '責任者名前(部署)
                      For i = 1 - 1 To 10 - 1                             '作業者1〜作業者10名前(部署)
                          If r.Offset(, o + i * 2).Value <> "" Then   '空白列はskip
                              j = j + 1
                              xx(j) = r.Offset(, o + i * 2).Value & "(" & r.Offset(, o + i * 2 + 1).Value & ")"
                          End If
                      Next
                      ReDim Preserve xx(0 To j)
                      k = k + 1
                      yy(k, 0) = Join(xx, vbCrLf)
                  Next
              End With
          End With
          Worksheets("Sheet2").Range("b1").Resize(UBound(yy)).Value = yy
      End Sub


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [194895] Re[4]: 貼り付けの仕方-

    解決!!ありがとうございました! / 記事引用/メール受信=OFF■

    □投稿者/ 慶次 -(2022/05/13(09:40))
    □U R L/
      kazuo様
      
      お礼のお返事が大変遅くなりましたことをお詫び申し上げます。ご指摘の件ですが,仕事でVBAでやりたいなと思ったときに少し勉強しながらやっている程度でありまして,kazuo様やここで回答される方のような洗練された,かっこいいコードを書く能力は微塵もございません。いまだに配列は苦手です。今回のkazuo様のコードも理解できるところと理解できないところがあります。例えば,以下のようなところです。なぜわざわざ-1をするのか(つまり0 to 9ではいけないのか)など...
      
       For i = 1 - 1 To 10 - 1    
      
      ご不快な思いをさせてしまうことは承知でお尋ねした次第です。
      
      私が希望している動作の確認ができました。kazuo様,ありがとうございました。


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [194896] Re[5]: 貼り付けの仕方-

    迷宮入りorほかあたって見ます・・ / 記事引用/メール受信=OFF■

    □投稿者/ 慶次 -(2022/05/15(14:20))
    □U R L/
      お世話になっております。
      
      kazuo様に作っていただきました下記のコードですが,もう一つ行わなければならない内容が出て参りました。前回は,行毎に一つのデータとして一つのセルに入れていただいたのですが,今回は責任者および作業者の名前だけをすべて異なるセルに入れたいのです(部署抜きです)。
      
      【前回】
      責任者(部署)
      作業者1(部署)
      作業者2(部署)
      
      これが一つのセルに収まっております。
      
      【今回】
      責任者
      作業者1
      作業者2
      
      これがそれぞれのセルに収まります。
      責任者がB2
      作業者1がB3
      作業者2がB4
      
      そしてつぎの行データが
      B5
      B6
      B7
      とつづきます。つまり,全人のデータが縦に繋がり,それぞれが一つのセルに収まると言うことです。
      
      私のレベルはkazuo様の洗練されたコードを改変するようなレベルからはほど遠く,失礼であることは理解しておりますが,ぜひお力を貸していただけませんでしょうか。
      
      Sub 回答例()
          Dim xx() As String, yy()
          Dim i As Long, j As Long, o As Long, k As Long
          Dim r As Range
          o = Range("v1").Column - Range("e1").Column '作業者の責任者からのオフセット
          With Worksheets("Sheet1")
              With .Range("e2", .Cells(.Rows.Count, "e").End(xlUp))
                  ReDim yy(1 To .Rows.Count, 0)
                  For Each r In .Cells
                      ReDim xx(0 To 10)
                      j = 0
                      xx(0) = r.Value & "(" & r.Offset(, 1).Value & ")"   '責任者名前(部署)
                      For i = 1 - 1 To 10 - 1                             '作業者1〜作業者10名前(部署)
                          If r.Offset(, o + i * 2).Value <> "" Then   '空白列はskip
                              j = j + 1
                              xx(j) = r.Offset(, o + i * 2).Value & "(" & r.Offset(, o + i * 2 + 1).Value & ")"
                          End If
                      Next
                      ReDim Preserve xx(0 To j)
                      k = k + 1
                      yy(k, 0) = Join(xx, vbCrLf)
                  Next
              End With
          End With
          Worksheets("Sheet2").Range("b1").Resize(UBound(yy)).Value = yy
      End Sub
      
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [194902] Re[6]: 貼り付けの仕方-

    記事引用/メール受信=OFF■

    □投稿者/ kazuo -(2022/05/16(20:52))
    □U R L/

      >責任者がB2
      >作業者1がB3
      >作業者2がB4

      >そしてつぎの行データが
      >B5
      >B6
      >B7

      前回max11人、今回3人固定と言うことですか?
      その場合必ず、3人のデータはあるのですか?
      それとも無い場合はその行空白にするのですか?

      また、Sheet1のデータは同じで良いですか?
      その場合、左列に存在する3人を優先するのですか?




    [194908] Re[7]: 貼り付けの仕方-

    記事引用/メール受信=OFF■

    □投稿者/ 慶次 -(2022/05/17(08:07))
    □U R L/

      kazuo様

      お世話になっております。この度は本当に申し訳ございません。またお時間をいただけることに御礼申し上げます。

      説明がわかりづらく申し訳ございませんでした。データは最初に投稿させていただきましたものと全く同じです。Maxは責任者も入れて11名で間違いございません。前回作成くださいましたコードでもそうですが、それぞれのデータの最大人数は異なっております。従って2行目のデータは5人、3行目は8人、4行目は1人(責任者のみ)、といった感じです。前回作成くださいましたSheet2に転記されるデータは一つのセルに異なる人数が縦に並んでいますが、この並びの状態で、一つ一つを1つのセル内に収めるということなのですが、ご理解いただけますでしょうか。また今回は名前だけの縦の並びが目的で、部署名は不要でございます。

      本当に申し訳ございませんが、どうかお力を貸してください。




    [194913] Re[8]: 貼り付けの仕方-

    記事引用/メール受信=OFF■

    □投稿者/ kazuo -(2022/05/17(14:19))
    □U R L/
      これでいいのかしらん?
      
      Sub 回答2例()
          Dim xx() As String, yy()
          Dim i As Long, j As Long, o As Long, k As Long
          Dim r As Range
          o = Range("v1").Column - Range("e1").Column '作業者の責任者からのオフセット
          With Worksheets("Sheet1")
              With .Range("e2", .Cells(.Rows.Count, "e").End(xlUp))
                  ReDim yy(1 To .Rows.Count * 11, 0)
                  For Each r In .Cells
                      j = j + 1
                      yy(j, 0) = r.Value              '責任者名前
                      For i = 1 - 1 To 10 - 1        '作業者1〜作業者10名前
                          If r.Offset(, o + i * 2).Value <> "" Then   '空白列はskip
                              j = j + 1
                              yy(j, 0) = r.Offset(, o + i * 2).Value
                          End If
                      Next
                  Next
              End With
          End With
          Worksheets("Sheet2").Range("b2").Resize(UBound(yy)).Value = yy
      End Sub
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [194914] Re[9]: 貼り付けの仕方-

    解決!!ありがとうございました! / 記事引用/メール受信=OFF■

    □投稿者/ 慶次 -(2022/05/19(14:11))
    □U R L/

      kazuo様

      お礼のお返事が大変遅くなりまして申し訳ございません。実は一昨日ワクチン接種をしたあと,昨日は高熱にうなされてしまい,掲示版を確認できる状態ではございませんでした。ようやく調子が戻りましたので,確認させて頂きました。

      非礼なお願いをしてしまいましたこと,また,ご不快な思いをさせてしまいましたこと,深くお詫び申し上げます。動作確認ができました。

      本当にありがとうございました。



このトピック内容の全ページ数 / [0]

このトピックに書きこむ
Name/
E-Mail/

└>このツリーのレス記事をメールで受信しますか? YES/ NO/
Title/
URL/
Comment/ 通常モード->  図表モード-> (←の場合適当に改行を入れて下さい)
タグが使用できます。例 ⇒ <font color="blue">文字</font>
解決!!ありがとうございました! 解決       保留中です・・・ 保留        迷宮入りorほかあたって見ます・・ 迷宮入       すいませ〜ん。誰か〜! Help! ←※回答者専用
解決したらチェック       保留(コードテスト中など・・)         解決不可orレスが全く付かなくてほかのサイトに行くときなど・・
削除キー/
(半角8文字以内) 


- Child Forum -
Edit:ゆう-G