[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『可視セルでの値貼り付け』(ひろこ)
お世話になります。
可視セルの値貼り付けをしたく質問させてください。
下記構成のエクセルがあり、A列を(する)でフィルタかけた際の可視セルコピー
の方法を教えて頂けないでしょうか?
B列およびC列は見た目は 同じ数字が入っておりますが、B列は数式、C列は値貼り付けのセルになっております。
A B C 1 する 1 1 2 する 2 =B1+1 2 3 しない 3 =B2+1 3 4 する 4 =B3+1 4 5 しない 5 =B4+1 5 6 する 6 =B5+1 6 7 する 7 =B6+1 7 8 する 8 =B7+1 8 9 しない 9 =B8+1 9 10 する 10 =B9+1 10
例えば D列にB列の内容、E列にC列の内容を可視セルコピーすると
オリジナルの書式(数式)が維持され、下記のような差が生じます。
D E 1 1 1 2 2 2 3 4 1 4 5 6 1 6 7 2 7 8 3 8 9 10 1 10
そこで質問ですが、数式を含むB列を可視セルコピーによって、
E列のような貼り付け結果とするにはどのようにしたらよろしいでしょうか?
< 使用 Excel:Excel2010、使用 OS:Windows11 >
こういうこと? B1 =IF(A1="する",ROW(),"") (フォーキー) 2023/02/05(日) 08:14:09
ご検討ありがとうございます。
ご質問させていただいた際に提示しました B列の式(1行上のセルに1を足す)というのは、あくまで簡単な事例として記載しましたので、実際は、複雑な数式が入っております。
ですので、質問は、数式を含む可視セルコピーによって、
E列のように値貼り付けするにはどのようにしたらよろしいでしょうか?
となります。
引き続き ご教授いただけましたら 幸いです。
(ひろこ) 2023/02/06(月) 01:00:34
私見では、
(1)可視セルだけをコピーすることはできますが、
可視セルだけに貼り付けることは仕様上できないのではないかと思います。
(コピー元が一行の場合は除きます。)
(2)そもそもですが、フィルタがかかっているデータだけ、値に変更するとは、
どんな状況なんでしょう。
値に変更してから、フィルタをかけるのではNGなんですか?
(3)フィルタ対象外のデータは、空白にしたいのであれば、(2)を実行したのちに、
再度、フィルタ条件を逆にしたものでフィルタして、それらを消去すればよいと思います。
(abc) 2023/02/06(月) 06:29:58
>E列にC列の内容を可視セルコピーするとオリジナルの書式(数式)が維持され、 >下記のような差が生じます。
どのようなコードを書いたらそうなるか提示されてませんが、
期待した結果が得られないのであれば、
「書いた」と思うのは単なる思い込みで、
実際にはそう書かれてないのだろうと思います。
>>マクロの記録の結果<<
Sub Macro1()
'
' Macro1 Macro
'
'
Columns("B:C").Select Selection.Copy Range("D1").Select ActiveSheet.Paste Range("A3").Select Application.CutCopyMode = False Selection.AutoFilter ActiveSheet.Range("$A$1:$E$11").AutoFilter Field:=1, Criteria1:="しない" Columns("D:E").Select Selection.SpecialCells(xlCellTypeVisible).Select Selection.ClearContents Range("A4").Select Selection.AutoFilter End Sub
エクセルには飛び飛びのセル範囲に貼り付けるという機能はないので、一捻りが必要。
こういうのは、逆転の発想をすると期待した結果が得られることが多いかも。
整理したらこんなとか。
Sub Macro002()
Dim rngTable As Range Dim rngOld As Range Dim rngNew As Range
With Range("A1").CurrentRegion Set rngTable = .Cells Set rngOld = Intersect(.Columns("B:C"), .Offset(1)) End With Set rngNew = rngOld.Offset(, rngOld.Columns.Count)
rngOld.Copy rngNew
rngTable.AutoFilter Field:=1, Criteria1:="しない" rngNew.SpecialCells(xlCellTypeVisible).ClearContents rngTable.AutoFilter End Sub
(まっつわん) 2023/02/06(月) 18:36:23
ま、あとはご自分で試行錯誤してみてください。
勉強なので。。。
(まっつわん) 2023/02/06(月) 18:41:13
(abc) 2023/02/06(月) 18:49:58
ご投稿ありがとうございます。
提示したE列のような空白行ができる貼り付けができないのでは?とのご指摘ですが、
フィルターをかけた列状態で 真横にコピペ(フィル)すれば 提示したような空白行が生じます。
なりませんでしょうか? 私は なりますが...。
可視セルを選択しCtrl +V後の、Ctrl + Cのいわゆるコピペでは、空白行生じないと思いますが、
可視セルを選択した後の、ctrl 押しながらの ctrl +R などの fill作業になります。
言葉足らずの説明でしたら 申し訳ございません。
(abc)さん どんな使用ケースを想定しているかとのご質問ですが、
フィルターを掛けた状態で、可視セル選択し、その可視セルだけ数式を値貼り付けでテキスト化したいという用途になります。
(まっつわん)マクロの提示ありがとうございます。
イチ作業として 頻繁に実施したく、キーボード操作で行えないものかと ご相談です。
わがまま 申し上げてすみません。
引き続き コメントアドバイスいただけましたら幸いです。
仕様でできない。が 答えなのでしょうか?
(ひろこ) 2023/02/11(土) 02:15:55
CTRL+Rと値複写機能を併せ持った機能は、標準装備されていないでしょう。
ですから、既に書きましたが、
・フィルタを掛ける前に、値複写をして、
・そのうえで、クリアする行をフィルタしてdelete
すればよいと思いますよ。
(abc) 2023/02/11(土) 06:50:21
被ったけど、せっかく書いたので投稿します。
Ctrl+Rでの可視セルコピー操作の事だと思いますが、一般操作でお望みの事はできないと思います。 ある意味、数式の列は「上の値+1」で辻褄があっているし... キーボードによるショートカットで実現したいなら、マクロになりますが、以下でどうでしょう?
以下のマクロをコピペして、
(1)「.xlsm」形式で保存。
(2)一旦、閉じる
(3)再度、開く
(4)フィルター適用後、Ctrl+Q
(5)貼り付け先を選択して、Ctrl+V
------------Thisworkbook------------ Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.OnKey "^q" End Sub
Private Sub Workbook_Open() Application.OnKey "^q", "SetClipBoard" End Sub
------------標準モジュール------------ Sub SetClipBoard() Dim targetRng As Range, s$ Set targetRng = ActiveWindow.RangeSelection If targetRng.CountLarge = 1 Then If Not targetRng.EntireRow.Hidden Then s = targetRng.Value Else Dim v, r&, c&, ss v = targetRng ReDim ss(1 To UBound(v)) For r = 1 To UBound(v) For c = 1 To UBound(v, 2) If targetRng.Cells(r, c).EntireRow.Hidden Then v(r, c) = Empty s = IIf(c = 1, v(r, c), s & vbTab & v(r, c)) Next ss(r) = s Next s = Join(ss, vbCrLf) End If If s <> "" Then With CreateObject("Forms.TextBox.1") .MultiLine = True .Text = s .SelStart = 0 .SelLength = .TextLength .Copy End With End If End Sub (まる) 2023/02/11(土) 07:02:10
>仕様でできない。が 答えなのでしょうか?
そうですね。機能一つでは出来ませんので、複数手順を組み合わせることになります。
この手の場合は、一旦全部コピペしてから、
不要なものをフィルターで抽出し、
表示されているものをクリア
という手順が一案で、
提示したマクロはそのような手順が書いてあります。
別案としては、一旦数式を入れて、
それを値に直すという手順もあるかと思います。
手動の操作でということならば、数式の方がいいかもですね。
(まっつわん) 2023/02/11(土) 08:57:26
ご検討、ご回答ありがとうございました。
仕様上できなくて 作業列で処理した後に コピー(fill)で戻すしかないということですね。
(ひろこ) 2023/02/12(日) 23:44:19
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.