[[20080613162651]] 『データのあるところだけ実行する』(強引) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データのあるところだけ実行する』(強引)
 セルを範囲指定してマクロを実行すると、全角文字にするものですが、
 行全体とか、列全体を選択して、実行した場合に時間がかかりすぎます。
 データの無いところまで処理しているみたいですが、どうすれば良いでしょうか?
 Sub Macro1()  
    cell_ad = Selection.Address
    For Each C In ActiveSheet.Range(cell_ad)
        C.Value = "'" + StrConv(C.Value, 4)
    Next C
 End Sub

 一旦配列変数に格納して作業すれば作業速度は上がります。
      (弥太郎)
    Dim i as Long, n as integer, cell_ad As Variant
    cell_ad = Selection.Value
    For i = 1 To UBound(cell_ad, 1)
        For n = 1 To UBound(cell_ad, 2)
            If Not IsEmpty(cell_ad(i, n)) Then
                cell_ad(i, n) = "'" & StrConv(cell_ad(i, n), 4)
            End If
        Next n
    Next i
    Selection.Cells(1, 1).Resize(Selection.Rows.Count, Selection.Columns.Count) = cell_ad


 衝突しましたがそのままマップします。

  Set r = Worksheets(1).Range(Worksheets(1).Range("A1"),Worksheets(1).Range("A65536").End(xlUp)
 とすると、A1からA65536からCtrl+↑で選択されるセルまでを対象にします。
 列方向は、
 Range("IV1").End(xlToLeft)
 などとします。
 詳しくはVBAヘルプで
 Endプロパティ
 を参照してください。

 また、
 対象セルが""以外の場合処理、という場合は、

  If c.Value <> "" Then
     処理
  End If
 というようにします。
 (MARBIN)

 ループしなければよいのでは?
 Sub test()
 With ActiveSheet.UsedRange
     .Value = Evaluate("if(" & .Address & "<>"""",jis(" & _
         .Address & ")","""")")
 End With
 End Sub
 (seiya)

 弥太郎さん、MARBINさんありがとうございます。とても早くなりました。
 seiyaさん、シンプルなんですが、Evaluateのところで引数の数が一致していません、または不正なプロ パティを指定しています。
 とエラーしますが、何故でしょうか?
 (強引)


 VBAでJISは使えないや。
https://www.excel.studio-kazu.jp/cgi-bin/estindex/estseek2.cgi?phrase=Dbcs&perpage=10&attr=&order=&clip=-1&navi=0
 BJ

 ラーするんで、&入れたりと勝手にかえちゃいましたけど。DBCSとjisを書換ましたが、めちゃめちゃな 果となりました。私が間違ってる?
 (強引)
 With ActiveSheet.UsedRange
      .Value = Evaluate("if(" & .Address & "<>""" & ",DBCS(" & .Address & ")" & ",""" & ")")
 End With


分かりました出来ました。
 (強引)
 With ActiveSheet.UsedRange
      .Value = Evaluate("if(" & .Address & "<>" & Chr(34) & Chr(34) & ",DBCS(" & .Address & ")" & "," & Chr(34) & Chr(34) & ")")
 End With

 DBCSですか、知りませんでした...
 強引さん、ありがとう。
 (seiya)

 結果は同じですが
 >&入れたり
 せずに                                                __________ここが式の終わり
Evaluate("if(" & .Address & "<>"""",jis(" & .Address & ")","""")")
                       ここの「"」が一つ多いので消した後 ^
 jisとDBCSを入れ替えるので良かったと思いますよ。
Evaluate("IF(" & .Address & "<>"""",DBCS(" & .Address & "),"""")")

 (HANA)

 すみません、DBCS教えてくれたのは、BJさんです。!!!
 (強引)
 HANAさん、実は前回気づいたのですが、今回また???となって、こんなにむずかしかったか?
 と思いながらやってしまいました。二重馬鹿を気づかせて頂き有り難う御座います。
 更に悪いのですが、数値が入っていたときも文字全角にしたいのですが、これがまた出来ません。
 IsNumericでtrueの時数値だと言うことまでは調べたのですが何処にどう入れればよいのやら?


 数値の場合全角の「数字(文字)」と成っても良いのですか?
 それとも、全角の「数値」として【表示】されるのが良いのですか?

 前者で有れば、先にセルの書式設定を文字列に設定。
 後者で有れば、先にセルの書式設定を全角数字に設定。
  (全角数字の書式設定は「その他」から選べます)
 しておくのはどうでしょう?

 勿論、コードの中にセルの書式を設定する物を組み込んでも
 良いと思いますが。

 (HANA)

 > 数値の場合全角の「数字(文字)」と成っても良いのですか?
 こちらですが、数値の頭に’を強制添付したいです。

 これは関係ないですが、
 > それとも、全角の「数値」として【表示】されるのが良いのですか?
 > 後者で有れば、先にセルの書式設定を全角数字に設定。
 全角に出来るなんて知りませんでした。探しましたらあるんですね。
 (強引)

 全角文字に成るだけじゃなく、
 >数値の頭に’を強制添付
 ですか・・・。

 関数は分かりますか?
 seiyaさんのコードは、例えば
 A1:A10に 文字や数字が入っている時にB1セルに
=IF(A1<>"",JIS(A1),"")
 の式を入れて、B10までフィルドラッグした後
 この範囲をコピーし、A1:A10に値貼り付け
 その後、B1:B10の式を消す
 と言ったような事をやっています。

 ですから、まず
 「A1セルの内容を全角にし、さらに
  数値の頭に’を強制添付」
 する関数を作ります。
=IF(A1<>"",IF(ISNUMBER(A1),"'","")&JIS(A1),"")
              ~~~~~~~~~~~~ ↑     &^^^^^^^それに、全角のA1セルの値をくっつける
      A1セルの値が数値なら「'」

 これをセルに入れる操作を記録にとると、数式部分は
"=IF(RC[-1]<>"""",IF(ISNUMBER(RC[-1]),""'"","""")&DBCS(RC[-1]),"""")"
 に成ります。

 マクロの記録はやってみた事が有りますか?
 ↓一応、参考リンクです。
https://www.excel.studio-kazu.jp/lib/e4b/e4b.html

 今回は、B1セルにA1セルを参照する式を入れたので RC[-1]
 と成っていますが、コードで実行する際は 自分のセルアドレス
 を指定するので、この部分が「.Address」に置き換わります。

 前部分を文字列、後ろ部分を文字列にし
 それらと「.Address」を「&」でくっつけるので
 実際は「" & .Address & "」と置き換わるのですが・・・。

 式中に3箇所有りますので、これらを変更後 最初の「=」をのけて
 現在使用している式の部分と置き換えてください。

 うまく行きそうですかね?

 (HANA)

 seiyaさん、HANAさん有り難う御座いました。やっと出来ました。
 HANAさん立派な先生に出会った様に感じました。
 筋道は教えるけど、最終的な答えは自分でねっって感じですね。
 しかしほとんど答えは出して貰ってるんですけどね。生徒の私の方が力不足でして。
 大変でした。でもおかげでなんとか出来ました。
 Private Sub CommandButton1_Click()
 With ActiveSheet.UsedRange'またはselection
 .Value = Evaluate("IF(" & .Address & "<>"""",IF(IsNumber(" & .Address & ") = True, " & """'""" & "&" & "DBCS(" & .Address & ")" & "," & """'""" & "&" & "DBCS(" & .Address & ")), """")") 'OK
 End With
 End Sub
 (強引)

 やはり難しいです。
 With selection
 としましたら、セル全体または、複数列を選択するとエラーします。
 複数行の場合はOKです。
 この判定内容を先に作った物の中に入れるには、大変な事になりますので、
 上記の場合は実行出来ないようにメッセージを入れようと思うのですが、
 セル全体または、複数列を選択していると言う判定が出来ません。
 どの様にすれば良いでしょうか?
 (強引)


 これまだ続いていたのですね...

 > With selection
 > としましたら、セル全体または、複数列を選択するとエラーします

 配列数式扱いになるので列全体の参照はできないと思いますよ?
 (seiya)

 > With selection
 > としましたら、
 最初に立ち返って仕舞うと思いますが・・・。

 選択した範囲のセルに、Evaluate(・・・ の値を入れるのですから。
(まぁ、エラーになってそれ以前の問題ですけどね。)

 ↓の様な物が良いのですかね?
 With Application.Intersect(Selection, ActiveSheet.UsedRange)

 (HANA)

 seiyaさん、HANAさん大変有り難う御座いました。終了です。
 With Application.Intersect(Selection, ActiveSheet.UsedRange)
 を使って大満足の結果です。

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.