エクセルについて質問です。

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

回答の条件
  • 1人5回まで
  • 登録:2008/03/11 21:15:53
  • 終了:2008/03/18 21:20:02

回答(5件)

id:a2gi No.1

a2gi回答回数81ベストアンサー獲得回数32008/03/11 21:56:49

ポイント20pt

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

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

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

id:aiomock

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

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

2008/03/11 23:36:07
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332008/03/12 00:41:55

ポイント20pt

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


参考サイト

id:aiomock

ありがとうございます。

2008/03/12 02:02:53
id:a2gi No.3

a2gi回答回数81ベストアンサー獲得回数32008/03/12 01:05:54

ポイント20pt

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

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回目の回答なので補足が出来ないかもしれないのでコメントを開けるか、回答数の制限を増やしてください。

id:aiomock

ありがとうございます。

2008/03/14 16:00:57
id:a2gi No.4

a2gi回答回数81ベストアンサー獲得回数32008/03/12 03:19:27

ポイント20pt

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

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

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

id:aiomock

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

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

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

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

2008/03/14 16:22:34
id:rikuzai No.5

りくっち回答回数1366ベストアンサー獲得回数1412008/03/12 10:49:23

ポイント20pt
  • シート内のデータ範囲において、該当データ以外を空欄にした表を別シートに作成したい

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


  • 該当のデータのあるシートをシートコピー
    • シートタブの上で右クリック→移動またはコピー→コピーを作成するにチェックしてOK
  • 該当データ以外をフィルタで選択
  • 表示された不要データを選択してDelete

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


以上ご参考まで。



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

  • id:a2gi
    オートフィルタを用いてフィルタをかけた状態で可視セルを選択すると
    不可視セルを無理矢理幅を広げてみると分かるのですが全部の行を選択します。
    なのでわざわざマクロ内で可視セルのみを表示という処理を加えました。
    ちなみにうまくいかないというのは処理が途中で止まりますか?それとも一応実行できるけど変な処理になっていますか?
    もし避ければそのままのファイルは駄目でしょうから同じような条件のファイルを作って送ってくれませんか?
    ↓にアップロード
    http://applis.servehttp.com/
    もしくは↓
    http://www.filebank.co.jp/
    「ゲストフォルダ」に接続
    ゲストの設定場所:フリープラン
    ファイルバンクID:a2gi
    フォルダ名:guest
    パスワード:guest
    でソフトをインストールしてアップロード。
    しつこいのですがここまで来ると気になるのでお願いします。
    (アップロード出来る場所があるならここじゃなくてもいいです)

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

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

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

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