Excel VBA質問箱 IV

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

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


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

【61766】マクロコード作成時の改行の扱い りった 09/6/2(火) 17:46 質問[未読]
【61767】Re:マクロコード作成時の改行の扱い neptune 09/6/2(火) 18:39 発言[未読]
【61769】Re:マクロコード作成時の改行の扱い りった 09/6/3(水) 9:30 質問[未読]
【61770】Re:マクロコード作成時の改行の扱い neptune 09/6/3(水) 10:12 発言[未読]
【61775】Re:マクロコード作成時の改行の扱い りった 09/6/3(水) 11:43 お礼[未読]
【61771】Re:マクロコード作成時の改行の扱い n 09/6/3(水) 10:57 発言[未読]
【61776】Re:マクロコード作成時の改行の扱い りった 09/6/3(水) 11:49 お礼[未読]

【61766】マクロコード作成時の改行の扱い
質問  りった  - 09/6/2(火) 17:46 -

引用なし
パスワード
   いつもお世話になっております。

Excelのデータを使って、PERSONAL.XLSのマクロのコードを作成したいのですが、改行の扱いに困っています。
うまい方法があれば御教示下さい。

[Excelのイメージ]
     A列          B列
1行目 XXXが未記入です。   ="data(" & row() & ")=""" & A1 & """"
2行目 XXXとYYYが不一致です。 ="data(" & row() & ")=""" & A1 & """"

[マクロのイメージ] (PERSONAL.XLSのマクロにコピペします。)
data(1)="XXXが未記入です。"
data(2)="XXXとYYYが不一致です。"

[困ること]
C3等に改行があると、うまくマクロのコードを作れない。
ZZZが大きすぎます。
αより小さい値を記入して下さい。

・A列は、マクロを知らない人が作成し頻繁に変更が入るので、キーワードを入れる等の対応は厳しいです。
・マクロでB列を出力する仕組みでもかまいません。
・守秘義務のため、質問箇所のみ抽出し単純化したサンプルにて質問させて頂いています。

【61767】Re:マクロコード作成時の改行の扱い
発言  neptune  - 09/6/2(火) 18:39 -

引用なし
パスワード
   ▼りった さん:
こんにちは

アドバイスできるならしてあげたいんですが、

>Excelのデータを使って、PERSONAL.XLSのマクロのコードを作成したいのですが、改行の扱いに困っています。
「マクロのコードを作成したい」の意味がわかりません。

>[Excelのイメージ]
>     A列          B列
>1行目 XXXが未記入です。   ="data(" & row() & ")=""" & A1 & """"
>2行目 XXXとYYYが不一致です。 ="data(" & row() & ")=""" & A1 & """"
>
>[マクロのイメージ] (PERSONAL.XLSのマクロにコピペします。)
>data(1)="XXXが未記入です。"
>data(2)="XXXとYYYが不一致です。"
もしかして、VBE内のソースコードをVBAで弄くりたいという事ですか?
それなら、そんな事はしません。仕様を考え直す事をお勧めします。


ExcelBookのデータを参照したりして利用するのが一般的と思いますが。

>[困ること]
>C3等に改行があると、うまくマクロのコードを作れない。
C列の情報はここまででは出てないですよね?

>ZZZが大きすぎます。
>αより小さい値を記入して下さい。
↑は何ですか?


>・マクロでB列を出力する仕組みでもかまいません。
どこへですか?
イミディエイトウィンドウへなら、例えば
debug.print worksheets("シート名").range("B3").value
ってな具合ですが。

>・守秘義務のため、質問箇所のみ抽出し単純化したサンプルにて質問させて頂いています。
単純化するのは結構ですが、読み直して第三者にもわかりやすくした方が
アドバイスを受け易いです。・・・・今は謎解きみたい。

【61769】Re:マクロコード作成時の改行の扱い
質問  りった  - 09/6/3(水) 9:30 -

引用なし
パスワード
   neptuneさんこんにちは。説明足らずだったようで済みません。

Excelのセルに記載されたデータ(エラーメッセージ一覧のようなもの)を元に動作するマクロを作りたいのですが、
実行時にそのExcelを開きたくありません。
(作業上他にも色々開く必要があり、重いし、邪魔)
Excel→CSVに変換する方法は、実行の都度CSVを読む必要があると思うので、処理速度的に心配です。
「手で書けよ!!」と言われそうですが、Excelのデータの量が多く、頻繁に不特定の箇所が変わるので、キツイです。
なので、PERSONAL.xls上のコードとして貼り付け利用する考えでいます。(セルを選択し、Ctrl+CしてVBAのソースコードにCtrl+V)
尚、イミディエイトウィンドウからの貼り付けでもかまいません。

PERSONAL.xls上で、
 data(1)="XXXが未記入です。"
 data(2)="XXXとYYYが不一致です。"
のようなコードを書く部分だけクリアすれば、data()を利用して実行する部分は自力で出来ます。

改行さえ無ければ、
 ="data(" & row() & ")=""" & A1 & """"
のような計算式の計算結果
 data(1)="XXXが未記入です。"
をPERSONAL.xlsのマクロに貼り付けて問題解決です。

VBAのソースコードを計算式ないしVBAにて作成するのって、邪道ですかね(^^;

【61770】Re:マクロコード作成時の改行の扱い
発言  neptune  - 09/6/3(水) 10:12 -

引用なし
パスワード
   ▼りった さん:
こんにちは

私の理解力がないのかまだ良く判りません。なので勘で書きます。

え〜っと、
>Excelのセルに記載されたデータ(エラーメッセージ一覧のようなもの)を元に
>動作するマクロを作りたいのですが、
ってのが良く判りません。

処理によって、
・適正なデータでないと判断したときに、
・独自のメッセージを出したいが、
・「独自のメッセージ」が沢山あるから、独自のメッセージのみを別Bookにて管理したい
ってな事ですかね?

↑を前提とすると、
りった さんの方針を全否定する事になるかもしれませんが、
私ならと言う事で書くと、必要なデータを
・1〜200件程度なら、
 設定ファイル(.iniの拡張子を持つファイル)か、csvファイル。
・それ以上の件数ならcsvファイルか件数によってはmdbファイル
 にします。

心配している処理速度ですが、どこにデータを置いても体感的には変わらないと
思いますよ。


>Excel→CSVに変換する方法は、実行の都度CSVを読む必要があると思うので、処理速度的に心配です。
↑の必要があっても、KB単位のデータなら体感的には差はわからん位
じゃないでしょうか?
1.KB単位のデータなら都度全部読んでもたいした事ないと思う。
2.最初に一気に読み込んで、何らかの方法でメモリ上に持たせておいても良いし、
3.DAO、ADO等のDBオブジェクトを使用しても良いし、
4.iniファイルならAPIで読んだら良いし。(速いです。)
多分2.4.3.1.の順番で速いと思います。

実行時にマクロを書き換えたいってな事なら話は変わってきます。
>>VBAのソースコードを計算式ないしVBAにて作成するのって、邪道ですかね(^^;
先ず、実行時にマクロでマクロを書き換えるって事はしません。
それってウイルスと同じなんですよね。

なのでO/Sによってはセキュリティーの問題も絡んできそうな?
vista持ってないので良くは知りませんが。配布するなら配布時も困るし、
動作保障が出来るかと言えばマクロ書き換えるのだから出来ないですよね。
何よりお行儀が悪いですよね。・・・私的には論外です。

【61771】Re:マクロコード作成時の改行の扱い
発言  n  - 09/6/3(水) 10:57 -

引用なし
パスワード
   >PERSONAL.xls上のコードとして貼り付け利用する考えでいます。(セルを選択し、Ctrl+CしてVBAのソースコードにCtrl+V)
これでいいなら数式を
="data(" & ROW() & ")=""" & SUBSTITUTE(A1,CHAR(10),"""&vbLf &""") & """"
で良いのでは。

でも
>セルを選択し、Ctrl+CしてVBAのソースコードにCtrl+V
するくらいなら
Sub test1()
  Selection.Copy
  Workbooks("personal.xls").Sheets("sheet1").Range("A1").PasteSpecial xlPasteValues
  Application.CutCopyMode = False
End Sub
でWorkbooks("personal.xls").Sheets("sheet1")を読み取った方が良いような気がします。
Sub test2()
  Dim data

  With Workbooks("personal.xls").Sheets("sheet1")
    data = Application.Transpose(.Range("A1", .Range("A1").End(xlDown)))
  End With
  MsgBox data(3)
End Sub

【61775】Re:マクロコード作成時の改行の扱い
お礼  りった  - 09/6/3(水) 11:43 -

引用なし
パスワード
   回答有難う御座います。
>処理によって、
>・適正なデータでないと判断したときに、
>・独自のメッセージを出したいが、
>・「独自のメッセージ」が沢山あるから、独自のメッセージのみを別Bookにて管理したい
>ってな事ですかね?
だいたいその通りです。(実際には独自のメッセージ以外の情報もあります。)

> 実行時にマクロを書き換えたいってな事なら話は変わってきます。
いえ、そんな大それたことは考えたこともなかったです。(汗)
コピペです。(オバカな感じですが。)

【61776】Re:マクロコード作成時の改行の扱い
お礼  りった  - 09/6/3(水) 11:49 -

引用なし
パスワード
   回答有難う御座います。
>>PERSONAL.xls上のコードとして貼り付け利用する考えでいます。(セルを選択し、Ctrl+CしてVBAのソースコードにCtrl+V)
>これでいいなら数式を
>="data(" & ROW() & ")=""" & SUBSTITUTE(A1,CHAR(10),"""&vbLf &""") & """"
>で良いのでは。
おおっ!! 計算式で出来るんですね。問題解決です。
結果的に計算式の質問になってしまって済みません。

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