人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルについて質問です。
可視セル状態のコピーはできるのですがその逆のフィルタをかけてそこへ別エクセルからデータを持って来て貼り付け。
可視セル状態の貼り付けのようなことはできますでしょうか?
お手数をおかけしますがよろしくお願いいたします。

●質問者: aiomock
●カテゴリ:コンピュータ インターネット
✍キーワード:エクセル コピー セル データ フィルタ
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● a2gi
●20ポイント

値だけを貼り付けるということ?

それなら「編集」→「形式を選択して貼り付け」→「値」にチェックでできます。

見当外れな回答かもしれないのでコメントを開けてください。

◎質問者からの返答

説明不足で申し訳ございません。フィルタを一回かけた状態で行数を超えて貼り付けをしたいということです。

例)フィルタをかけると行24、32、48など行を飛び越してエクセル上にデータが表示されます。そこに3行のデータをコピーして24、32、48行目にはりつけようとしても32と48には反映されず、24、25,26行目に連続してコピーしたデータが貼り付けられてしまいます。これをきちんと24、32、48行目にどうやったらきれいに貼り付けができるのかということを知りたかったのですがもし知っているようでしたら教えていただいてよろしいでしょうか。よろしくお願いいたします。


2 ● pahoo
●20ポイント

オートフィルタをかけた状態で、コピー対象範囲を選択し、a2gi が回答した方法でコピー&ペーストすれば、フィルタリングされている領域だけコピーできるはずです。


参考サイト

◎質問者からの返答

ありがとうございます。


3 ● a2gi
●20ポイント

たぶん標準の機能では無理だと思います。なので以下のようなマクロを作成しました。

Sub 特殊貼り付け()
 Dim copy_buf, paste_buf As Range
 Dim copy_row, paste_row, copy_column, paste_column As Integer
  'コピーするセルの取得
 Set copy_buf = Selection
  '貼り付けるセルの取得
 Set paste_buf = Application.InputBox(Prompt:="貼り付けるセルの先頭を選択してください。", Type:=8)
  '貼り付けるセルの列番号の取得
 paste_row = paste_buf.Row
 paste_column = paste_buf.Column
  'コピーするセルを一つずつコピー
 For i = 1 To copy_buf.Count()
  'コピーするそれぞれのセルの行列番号を取得
 copy_row = copy_buf.Areas(i).Row
 copy_column = copy_buf.Areas(i).Column
  'コピー&ペースト
 Cells(copy_row, paste_column).Value = Cells(copy_row, copy_column).Value
 Next i
End Sub

こっちは貼り付け先のセルからコピー元のセルの位置を相対的に貼り付けます。

Sub 特殊相対的貼り付け()
 Dim copy_buf, paste_buf As Range
 Dim copy_row, paste_row, copy_column, paste_column, row_first As Integer
  'コピーするセルの取得
 Set copy_buf = Selection
  '貼り付けるセルの取得
 Set paste_buf = Application.InputBox(Prompt:="貼り付けるセルの先頭を選択してください。", Type:=8)
  '貼り付けるセルの列番号の取得
 paste_row = paste_buf.Row
 paste_column = paste_buf.Column
  'コピーするセルの先頭のセルの行番号の取得
 row_first = copy_buf.Areas(1).Row
  'コピーするセルを一つずつコピー
 For i = 1 To copy_buf.Count()
  'コピーするそれぞれのセルの行列番号を取得
 copy_row = copy_buf.Areas(i).Row
 copy_column = copy_buf.Areas(i).Column
  'コピー&ペースト
 Cells(paste_row + copy_row - row_first, paste_column).Value = Cells(copy_row, copy_column).Value
 Next i
End Sub

2回目の回答なので補足が出来ないかもしれないのでコメントを開けるか、回答数の制限を増やしてください。

◎質問者からの返答

ありがとうございます。


4 ● a2gi
●20ポイント

すみません。フィルタってオートフィルタの事なんですね。(使ったことのない機能でした・・・)

NO.2の方の方法を試してみましたが、これだともう一度全て表示にすると詰めて表示されてしまいますね。

以下のように修正しました。(可視セルを選択するようにしました)

Sub 特殊貼り付け()
 Dim filter, copy_buf, paste_buf As Range
 Dim copy_row, paste_row, copy_column, paste_column As Integer
  'オートフィルタを使用している場所を選択
 Set filter = Application.InputBox(Prompt:="オートフィルタを使用しているセルを選択", Type:=8)
 filter.CurrentRegion.SpecialCells(xlCellTypeVisible).Select
 
  'コピーするセルの取得
 Set copy_buf = Selection
  '貼り付けるセルの取得
 Set paste_buf = Application.InputBox(Prompt:="貼り付けるセルの先頭を選択してください。", Type:=8)
  '貼り付けるセルの列番号の取得
 paste_row = paste_buf.Row
 paste_column = paste_buf.Column
  'コピーするセルを一つずつコピー
 For i = 1 To copy_buf.Areas.Count
  'コピーするそれぞれのセルの行列番号を取得
 copy_row = copy_buf.Areas(i).Row
 copy_column = copy_buf.Areas(i).Column
 For j = 1 To copy_buf.Areas(i).Count
  'コピー&ペースト
 Cells(copy_row, paste_column + j - 1).Value = Cells(copy_row, copy_column + j - 1).Value
 Next j
 Next i
End Sub
Sub 特殊相対貼り付け()
 Dim filter, copy_buf, paste_buf As Range
 Dim copy_row, paste_row, copy_column, paste_column, row_first As Integer
  'オートフィルタを使用している場所を選択
 Set filter = Application.InputBox(Prompt:="オートフィルタを使用しているセルを選択", Type:=8)
 filter.CurrentRegion.SpecialCells(xlCellTypeVisible).Select
 
  'コピーするセルの取得
 Set copy_buf = Selection
  '貼り付けるセルの取得
 Set paste_buf = Application.InputBox(Prompt:="貼り付けるセルの先頭を選択してください。", Type:=8)
  '貼り付けるセルの列番号の取得
 paste_row = paste_buf.Row
 paste_column = paste_buf.Column
  'コピーするセルの先頭のセルの行番号の取得
 row_first = copy_buf.Areas(1).Row
  'コピーするセルを一つずつコピー
 For i = 1 To copy_buf.Areas.Count
  'コピーするそれぞれのセルの行列番号を取得
 copy_row = copy_buf.Areas(i).Row
 copy_column = copy_buf.Areas(i).Column
 For j = 1 To copy_buf.Areas(i).Count
  'コピー&ペースト
 Cells(paste_row + copy_row - row_first, paste_column + j - 1).Value = Cells(copy_row, copy_column + j - 1).Value
 Next j
 Next i
End Sub

これでうまくいくと思います!あとは補足で足りると思うのでコメントも開けてもらえるとうれしいです(ポイントを質問者さんが無駄にしないで済みます)

◎質問者からの返答

マクロ通りに実行することができませんでした。。。

最初のコピーする範囲の指定がうまくできていないように見えます。

コピーするデータ範囲をこちらで指定して "オートフィルタを使用しているセルを選択" でオートフィルのかかっている貼り付ける選択範囲を指定 "貼り付けるセルの先頭を選択してください。" で貼り付ける様なことはできないでしょうか?

こちらの勘違いかもしれませんがよろしくお願いいたします。


5 ● りくっち
●20ポイント

と解釈して、私が同じ事をしたいと思ったときには↓のような手順をとります。



これで不要行のデータがクリアされた表が複製されます。


以上ご参考まで。



http://www.relief.jp/itnote/archives/000437.php

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ