エクセルに関して質問です。

添付画像をご参照ください。このファイルをファイルAとします。
ファイルAの赤で塗りつぶした箇所には関数が、入っています。
そして白地の箇所に数値を貼り付けたいと思っています。

この画像とまったく同じファイルがあり、このファイルをファイルBとします。
このファイルBには、ファイルAの白地の所の数値が入っています。
順番はファイルAと同じです。
ただし、ファイルBには、ファイルAの赤い部分(関数が入っている部分)がありません。
行・列ごと削除されています。
このファイルBの数値を、ファイルAに簡単に貼り付ける方法を探しています。

ファイルBをコピーして、ファイルAの赤い部分を非表示にして、貼り付けても
うまくいきません。
何か良い方法はないでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/03/17 15:32:52
  • 終了:2010/03/18 14:05:29

ベストアンサー

id:p332 No.5

p332回答回数36ベストアンサー獲得回数32010/03/17 17:54:05

ポイント20pt

赤い部分を飛ばしてデータをコピーするマクロを記載します。

とりあえず下記手順を実行すればマクロが実行されます。

0.マクロが使えるようセキュリティ設定をする(手順:http://allabout.co.jp/computer/msexcel/closeup/CU20070228A/)。

1.適当なフォルダを用意し、

・ファイルA(ファイル名を「ファイルA.xls」とする)

・ファイルB(ファイル名を「ファイルB.xls」とする)

・マクロ用の新規ファイル

の3つのファイルを入れる

2.マクロ用ファイルを開き、Alt+F11を押す

3.VBAの編集画面が表示されるので、メニューから「挿入」-「標準モジュール」を選択

4.「標準モジュール」に下記のコードをコピーペースト

5.F5を押す

通常のエクセルの画面のメニューからも実効できます。

(シート上のボタンを押すと実行されるように設定したり、ショートカットに登録したりもできます)



Sub CopyData()

    Dim RngA As Range
    Dim RngB As Range
    
    Dim WB_A As Workbook
    Dim WB_B As Workbook
    
    
    fldrPath = ThisWorkbook.Path & "\"
    
    Set WB_A = Workbooks.Open(fldrPath & "ファイルA.xls")
    Set WB_B = Workbooks.Open(fldrPath & "ファイルB.xls")
    
    Set RngA = WB_A.Sheets(1).Cells(2, 2)
    With WB_B.Sheets(1)
        Set RngB = .Range(.Cells(2, 2), .Cells.SpecialCells(xlCellTypeLastCell))
    End With
    
    vals = RngB.Value
    
    r = 0
    For i = 1 To UBound(vals, 1)
        r = r + 1
        Do While RngA(r, 1).Interior.ColorIndex = 3 And RngA(r, 2).Interior.ColorIndex = 3
            r = r + 1
        Loop
        
        c = 0
        For j = 1 To UBound(vals, 2)
            c = c + 1
            Do While RngA(r, c).Interior.ColorIndex = 3
                c = c + 1
            Loop
            
            RngA.Cells(r, c).Value = vals(i, j)
            
        Next
    Next
    
    WB_B.Close False
    
End Sub

その他の回答(4件)

id:taknt No.1

きゃづみぃ回答回数13537ベストアンサー獲得回数11982010/03/17 15:41:04

ポイント20pt

添付の画像がないですね。

シートごと コピーして ファイルAに入れたら 入るのでしょうか?

また、その入ったシートのその部分を コピーできるのでしょうか?

http://q.hatena.ne.jp/1268807570

id:martytaka

しまった・・・

2010/03/17 16:11:00
id:SALINGER No.2

SALINGER回答回数3454ベストアンサー獲得回数9692010/03/17 15:48:03

ポイント20pt

添付画像がありませんが、だいたいやりたいことはわかります。

ファイルB全体をコピーします。

ファイルAのA1を選択して、形式を選択して貼り付け→空白セルを無視するにチェックを入れて貼り付ければできます。

http://q.hatena.ne.jp/

id:martytaka

ファイルBには、ファイルAでは、赤で塗りつぶした箇所(関数がある箇所)が無いのです。

空欄ではなく、行ごと削除されていて、詰めてしまってあるのです。

なので、無理なんじゃないでしょうか。。

どうでしょう?

画像も添付しました。

http:/f.hatena.ne.jp/martytaka/20100317163000

よろしければ2回投稿できますので、ご投稿ください。

2010/03/17 16:37:08
id:Km1967 No.3

Km1967回答回数224ベストアンサー獲得回数352010/03/17 16:20:43

ポイント20pt

行ごと削除されていて、詰めてしまってある

逆の発想だが、ファイルBにファイルAの関数部分をコピーして張り付けるというのはどうじゃ?


まったくの余談だが、Excelの場合はファイル単位をブック、ブックの中には1あるいは複数のシートが含まれておる。ファイルAやファイルBという表現では足りないのじゃ。 関数部分以外にブック内の他のシートとの連携や、場合によってはマクロなども関係してくる可能性があるのじゃ。気をつけよ。

画像がまだ手元にあるならば、はてなフォトライフや、無料のHPスペースなどにアップロードしてURLをコメント欄に書くなりすれば良いと思うぞ。

http://f.hatena.ne.jp/guide

id:martytaka

ありがとうございます。

画像は

http://f.hatena.ne.jp/martytaka/20100317163000

です。

ファイルBでは、この画像の白い部分のみが詰めて、表示されております。

また、他シートとの連携はないです。

よろしければ2回投稿できますので、ご投稿ください。

確かに、ファイルBに行の挿入や列の挿入を繰り返し、

ファイルAと同じ形にして、「空白セルを無視する」でコピペなら可能だと思いますが

画像より実際は、赤い部分が多く複雑なので、ちょっと面倒です。。

2010/03/17 16:36:43
id:SALINGER No.4

SALINGER回答回数3454ベストアンサー獲得回数9692010/03/17 17:06:35

ポイント20pt

非表示になっていると直接コピーできなければ、できるマクロでも作ってみようということでVBA。


1 ファイルAで赤い部分を非表示にする。(手動でできるようなので)

2 ファイルBで左上から表全体を選択。

3 Copy2を実行。

4 非表示を元に戻す。


※コード中ファイルAはSheet1にしています。実際のファイル名に変更してください。

Sub Copy2()
    Dim edRow As Long
    Dim edColumn As Long
    Dim r As Long
    Dim c As Long
    Dim i As Long
    Dim j As Long
    
    With Worksheets("Sheet1")
        r = 1
        For i = 1 To Selection.Rows.Count
            If Not .Rows(r).Hidden Then
                c = 1
                For j = 1 To Selection.Columns.Count
                    If Not .Columns(c).Hidden Then
                        .Cells(r, c).Value = Cells(i, j).Value
                    Else
                        j = j - 1
                    End If
                    c = c + 1
                Next j
            Else
                i = i - 1
            End If
            r = r + 1
        Next i
    End With
End Sub

http://q.hatena.ne.jp/

id:martytaka

3 Copy2を実行。

この実行の仕方が分からないです。。。

2回投稿くださって構わないので、このやり方を。。涙

2010/03/17 17:21:59
id:p332 No.5

p332回答回数36ベストアンサー獲得回数32010/03/17 17:54:05ここでベストアンサー

ポイント20pt

赤い部分を飛ばしてデータをコピーするマクロを記載します。

とりあえず下記手順を実行すればマクロが実行されます。

0.マクロが使えるようセキュリティ設定をする(手順:http://allabout.co.jp/computer/msexcel/closeup/CU20070228A/)。

1.適当なフォルダを用意し、

・ファイルA(ファイル名を「ファイルA.xls」とする)

・ファイルB(ファイル名を「ファイルB.xls」とする)

・マクロ用の新規ファイル

の3つのファイルを入れる

2.マクロ用ファイルを開き、Alt+F11を押す

3.VBAの編集画面が表示されるので、メニューから「挿入」-「標準モジュール」を選択

4.「標準モジュール」に下記のコードをコピーペースト

5.F5を押す

通常のエクセルの画面のメニューからも実効できます。

(シート上のボタンを押すと実行されるように設定したり、ショートカットに登録したりもできます)



Sub CopyData()

    Dim RngA As Range
    Dim RngB As Range
    
    Dim WB_A As Workbook
    Dim WB_B As Workbook
    
    
    fldrPath = ThisWorkbook.Path & "\"
    
    Set WB_A = Workbooks.Open(fldrPath & "ファイルA.xls")
    Set WB_B = Workbooks.Open(fldrPath & "ファイルB.xls")
    
    Set RngA = WB_A.Sheets(1).Cells(2, 2)
    With WB_B.Sheets(1)
        Set RngB = .Range(.Cells(2, 2), .Cells.SpecialCells(xlCellTypeLastCell))
    End With
    
    vals = RngB.Value
    
    r = 0
    For i = 1 To UBound(vals, 1)
        r = r + 1
        Do While RngA(r, 1).Interior.ColorIndex = 3 And RngA(r, 2).Interior.ColorIndex = 3
            r = r + 1
        Loop
        
        c = 0
        For j = 1 To UBound(vals, 2)
            c = c + 1
            Do While RngA(r, c).Interior.ColorIndex = 3
                c = c + 1
            Loop
            
            RngA.Cells(r, c).Value = vals(i, j)
            
        Next
    Next
    
    WB_B.Close False
    
End Sub
  • id:SALINGER
    行・列ごと削除とは数式が削除されているだけではなくて、行列も詰めてあるということでしたか。
  • id:Km1967
    2回目よろしくと書かれても、間が空いているから、残念だが、一発でコピペできるようなものはないな。
    面倒でもそれぞれの範囲で(B2:B5で一回、B8:B14で一回といった具合に)コピペするしかないじゃろ。
    同じものが沢山あって困るという事であれば、マクロでも組んで対応すればいいんじゃが、必要か?
  • id:Km1967
    >画像より実際は、赤い部分が多く複雑

    マクロと書いたが、あまり複雑すぎる場合は現物を詳細に見ないと作れぬぞ。
  • id:taknt
    ファイルBの画像もないと わからないねぇ。

    たぶん、行や列が 非表示(幅が 0の状態)になっているだけかと思うんだけど。
  • id:martytaka
    皆様、諸々、ありがとうございます。

    >たぶん、行や列が 非表示(幅が 0の状態)になっているだけかと思うんだけど。

    いや、非表示ではなく、完全削除です。行列も詰めてあります。
  • id:SALINGER
    実行の仕方が分からないと言うことは、VBAを使ったことはありませんでしたか。
    ここでは標準モジュールというところにコードをコピペして実行します。
    簡単ですので次のサイトを参考にしてみてください。
    http://www.officepro.jp/excelvba/ini/index1.html
    http://www.officepro.jp/excelvba/ini/index2.html
    http://www.officepro.jp/excelvba/ini/index3.html
     
    考えてみると別に非表示にする必要もないので、こちらのコードでは非表示にする省略し、
    ファイルBの表を選択して実行だけでいいです。
    >>
    Sub Copy2()
    Dim edRow As Long
    Dim edColumn As Long
    Dim r As Long
    Dim c As Long
    Dim i As Long
    Dim j As Long

    With Worksheets("Sheet1")
    c = 1
    r = 1
    For i = 1 To Selection.Rows.Count
    c = 1
    If .Cells(r, c).Interior.ColorIndex <> 3 Then
    c = 1
    For j = 1 To Selection.Columns.Count
    If .Cells(r, c).Interior.ColorIndex <> 3 Then
    .Cells(r, c).Value = Cells(i, j).Value
    Else
    j = j - 1
    End If
    c = c + 1
    Next j
    Else
    i = i - 1
    End If
    r = r + 1
    Next i
    End With
    End Sub
    <<
  • id:Km1967
    やはり早いな id:SALINGER さん。同じ手を考えておったのじゃが作らんでも良くなったわい。
    気になったのじゃが赤い色は便宜上書いただけだろうて、カラーインデックスよりもフォーミュラを参照するなりしたほうが良くないかや?

    >2回投稿くださって構わない
    id:martytaka さん。id:SALINGER さんは既に2回投稿しておられるので回数を増やしてやらんと無理じゃぞ。投稿者のIDをよく見るのじゃ。

    今日の文体は老体モードじゃ。かっかっかっ。

  • id:SALINGER
    ファイルってくらいだから、違うブックなのか。その場合は、p332さんのコードで。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません