Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7079 / 13646 ツリー ←次へ | 前へ→

【41343】シートのコピー(計算式を除く):一部数... まったくの初心者です。 06/8/7(月) 11:23 質問[未読]
【41345】Re:シートのコピー(計算式を除く):一部... へっぽこ 06/8/7(月) 11:35 発言[未読]
【41347】Re:シートのコピー(計算式を除く):一... まったくの初心者です。 06/8/7(月) 11:50 質問[未読]
【41348】Re:シートのコピー(計算式を除く):一... へっぽこ 06/8/7(月) 12:08 発言[未読]
【41349】Re:シートのコピー(計算式を除く):一... まったくの初心者です。 06/8/7(月) 12:36 質問[未読]
【41351】Re:シートのコピー(計算式を除く):一... へっぽこ 06/8/7(月) 13:04 回答[未読]
【41352】Re:シートのコピー(計算式を除く):一... まったくの初心者です。 06/8/7(月) 13:09 お礼[未読]
【41353】Re:シートのコピー(計算式を除く):一... へっぽこ 06/8/7(月) 13:15 発言[未読]
【41350】Re:シートのコピー(計算式を除く):一... へっぽこ 06/8/7(月) 12:47 発言[未読]

【41343】シートのコピー(計算式を除く):一部数...
質問  まったくの初心者です。  - 06/8/7(月) 11:23 -

引用なし
パスワード
   おはようございます。
既質にありましたら失礼いたします。

シート名”原本”には関数(マクロ)の入った表があります。
これを別シート名”提出”に罫線と文字・数値だけを複写したいのです。

”形式を選択して貼り付け”には罫線と文字・数値(計算式を除くもの)
だけを複写する機能がないようなので困ってます。

又,一部計算式をJ6セル以下に,同行のAセルが空白ではない箇所に計算する
 =IF(ISERROR(IF(A6="","",TRUNC(G6*I6)),"",IF(A6="","",TRUNC(G6*I6)))
 =IF(ISERROR(IF(A7="","",TRUNC(G7*I7)),"",IF(A7="","",TRUNC(G7*I7)))
を組み込みたいのです。

皆様のお知恵を拝借できれば幸いです。
よろしくお願いいたします。

【41345】Re:シートのコピー(計算式を除く):一...
発言  へっぽこ  - 06/8/7(月) 11:35 -

引用なし
パスワード
   こんにちは。

丸ごとコピーしてあとからジャンプ機能で数式だけ選んで、消してしまうのは
ダメですか?

【41347】Re:シートのコピー(計算式を除く):一...
質問  まったくの初心者です。  - 06/8/7(月) 11:50 -

引用なし
パスワード
   へっぽこ さん:こんにちは。

>こんにちは。
>
>丸ごとコピーしてあとからジャンプ機能で数式だけ選んで、消してしまうのは
>ダメですか?

早速ありがとうございます。
当方は2003を使用していますが
”編集−クリアー”には”数式と値”の削除はありますが
”数式だけの削除”が出来る機能があるのですか?
すみませんがジャンプ機能を教えていただけないでしょうか。
よろしくお願いいたします。

【41348】Re:シートのコピー(計算式を除く):一...
発言  へっぽこ  - 06/8/7(月) 12:08 -

引用なし
パスワード
   ジャーンプ!機能は…

ワークシートの画面で、
・対象となるセル範囲を選択。
・「編集」→「ジャンプ」と選択。(イキナリF5でもおんなじ)
・「セル選択」を押す。
・「数式」を選んで、「OK」

で数式が入力されているセルが選ばれるのでDELキーでクリアすれば
いいかなーと思いました。

これをマクロで書くとこんな感じでしょうか。
(対象範囲を勝手にA1〜E14とさせてもらいます)

Sub サンプル()
  Dim 該当セル As Range
  'ジャーンプ機能。
  Set 該当セル = Range("A1:E14").SpecialCells(xlCellTypeFormulas, 23)
  If 該当セル Is Nothing Then
    MsgBox "数式セルはありません。"
  Else
    'DELキーと一緒。
    該当セル.ClearContents
  End If
End Sub

ちなみに
SpecialCells(xlCellTypeFormulas, 23)
                 ~~
の23はジャンプの画面にある
数値  → xlNumbers  → 1
文字  → xlTextValues → 2
論理値 → xlLogical  → 4
エラー値→ xlErrors   →16
をぜーんぶ足した値だったりします。
なので
23と書く代わりに
〜(xlCellTypeFormulas, xlNumbers + xlTextValues + xlLogical + xlErrors)
という書き方もアリです。

さらに
〜(xlCellTypeFormulas, 16) としたり
〜(xlCellTypeFormulas, xlErrors) とすれば、
数式の中でもエラーになっているもの(#N/Aや#VALUEなど)だけを
対象にすることもできます。

以上で〜す。(^^)/

【41349】Re:シートのコピー(計算式を除く):一...
質問  まったくの初心者です。  - 06/8/7(月) 12:36 -

引用なし
パスワード
   へっぽこ さん:ありがとうございます。

ジャーンプ機能を知りました。
それで

 A      B ・・・・・             
1   値:VLOOKUP(A1,原本!$A$5:$O$10000,5) 
2   値:VLOOKUP(A2,原本!$A$5:$O$10000,5)

ここで反転後,F5で数式を選んでOK。そしてDELを押すと
値も消えてしまいました。
値を残し,数式だけを消す方法はございますでしょうか?

幾度もすみませんが,よろしくお願いいたします。

【41350】Re:シートのコピー(計算式を除く):一...
発言  へっぽこ  - 06/8/7(月) 12:47 -

引用なし
パスワード
   さらに調子に乗って…

ジャンプを記録すると
Selection.SpecialCells(xlCellTypeFormulas, 23).Select
などのように記録されますが
「なんで23が、xlNumbers + xlTextValues + xlLogical + xlErrorsとなるの?」
「どこにそんなこと書いてあるの?」
というあたりの話を。

記録されたマクロの「SpecialCells」の辺りへカーソルを持って行きF1を押すと、
ヘルプの画面が表示されます。
その中に灰色の行で
expression.SpecialCells(Type, Value)
と書いてあり、括弧の中の順番から
Selection.SpecialCells(xlCellTypeFormulas, 23).Selectの
「xlCellTypeFormulas」が「Type」に、
「23」が「Value」に相当するんだなと推測が付きます。

そしてヘルプ画面の
「Value 省略可能です。〜〜〜XlSpecialCellsValues クラスの定数を使用します。」の
「XlSpecialCellsValues」が青くなっているのでなんとなくクリックしてみると、

使用できる定数は、次に示す XlSpecialCellsValue クラスのいずれかです。
xlErrors
xlLogical
xlNumbers
xlTextValues

という記述があらわれます。
このことから23と書く代わりに上の4つを書いても良いのだと知ることができます。

次に、マクロの画面でF2を押すと見慣れない画面が現れます。
(画面右上の「×」の下の「×」を押すといつもの画面に戻ります。)

その画面の上の方に
「<すべてのライブラリ>」「▼」
「           」「▼」
とあるので下の枠(双眼鏡ボタンの左の枠ですね)
に上に書いてあった「xlErrors」と書いて双眼鏡ボタンを押します。

すると画面に先程の
xlErrors
xlLogical
xlNumbers
xlTextValues
これらが現れ、下の方に

Const xlErrors = 16 (&H10)
  Excel.XlSpecialCellsValue のメンバ

と書いたあるかと思います。

その記述から xlErrors = 16 である事を知ることができます。

ちなみに
Const xlErrors = 16 (&H10)
などと書いてあると「なんじゃこりゃ?」という感じかも知れませんが、
何のことは無い

Sub あいうえお()
  Const my定数 = 16
End Sub

というのと一緒で単に16という数字を定数に持たせてあるだけのことです。

なので
MsgBox xlErrors
とすれば16と表示されますし、

ActiveCell.Interior.ColorIndex = xlErrors
とすれば16番目の色が着きます。

ではでは。

【41351】Re:シートのコピー(計算式を除く):一...
回答  へっぽこ  - 06/8/7(月) 13:04 -

引用なし
パスワード
   > ここで反転後,F5で数式を選んでOK。そしてDELを押すと
> 値も消えてしまいました。
> 値を残し,数式だけを消す方法はございますでしょうか?

「まったくの初心者です。」さんのやりたいことの解釈が違ったようですね。(^^;)>
「値を残し、数式だけを消す」というよりも「数式は値として貼り付けたい」
ということではないでしょうか?

そうすると1つはジャンプをやめて、
・最初に普通に貼りつけ。(書式や罫線をコピーするため)
・次に同じ物をコピー→形式を選択して貼りつけ→値(これにより数式を値にする)

とするか、もしくはジャンプ機能までは一緒で、

Sub サンプル2()
  Dim 該当セル As Range
  Dim 各々のセル As Range
  'ジャーンプ機能。
  Set 該当セル = Range("A1:E14").SpecialCells(xlCellTypeFormulas, 23)
  If 該当セル Is Nothing Then
    MsgBox "数式セルはありません。"
  Else
    'ジャンプで選ばれたセルの1つ1つを処理する。
    For Each 各々のセル In 該当セル
      '値として設定しなおす。
      各々のセル.Value = 各々のセル.Value
    Next
  End If
End Sub

とするか。でしょうか。

ちなみに上記のマクロの
各々のセル.Value = 各々のセル.Value
が「同じ内容を設定してなんの意味があるの?」と感じるかもしれませんが、

数式が入っているセルを1つ選んだ状態で以下のマクロを動かしてもらえると
わかって頂けるかな〜?と。

Sub セルの内容をいろいろな角度で表示()
  MsgBox ActiveCell.Value '値として表示
  MsgBox ActiveCell.Formula '数式として表示
  MsgBox ActiveCell.FormulaR1C1 '数式(R1C1形式)として表示
End Sub

で、値として捉えた内容をそのまま設定し直しているのです。
(回答としてあってるかな?)

【41352】Re:シートのコピー(計算式を除く):一...
お礼  まったくの初心者です。  - 06/8/7(月) 13:09 -

引用なし
パスワード
   ▼へっぽこ さん:

幾度もありがとうございます。

シートをまるごと選択して
コピー後,形式を選択して貼り付けの”値”を選択すると
数式だけの削除出来るのですね。

結果的には簡単なのですが,初心者には気づかないんですよね。
初心者を脱皮して,いついかはここで回答できるように
がんばってみます。
本当にありがとうございました。

【41353】Re:シートのコピー(計算式を除く):一...
発言  へっぽこ  - 06/8/7(月) 13:15 -

引用なし
パスワード
   >数式だけの削除出来るのですね。

というか、「数式が値として貼り付く」感じですね。

頑張ってください。

7079 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free