Excel VBA質問箱 IV

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

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


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

【6047】オートフィルでコピーしたいのですが... REIKO 03/6/13(金) 16:51 質問
【6049】Re:オートフィルでコピーしたいのですが... ichinose 03/6/13(金) 17:10 回答
【6089】Re:オートフィルでコピーしたいのですが... REIKO 03/6/16(月) 13:16 質問
【6090】Re:オートフィルでコピーしたいのですが... ichinose 03/6/16(月) 13:25 発言
【6099】Re:オートフィルでコピーしたいのですが... REIKO 03/6/16(月) 15:49 質問
【6101】Re:オートフィルでコピーしたいのですが... ichinose 03/6/16(月) 16:23 回答
【6103】Re:オートフィルでコピーしたいのですが... REIKO 03/6/16(月) 16:59 お礼
【6104】Re:オートフィルでコピーしたいのですが... ichinose 03/6/16(月) 17:16 回答
【6119】Re:オートフィルでコピーしたいのですが... REIKO 03/6/17(火) 9:35 質問
【6120】Re:オートフィルでコピーしたいのですが... ichinose 03/6/17(火) 9:50 発言
【6123】Re:オートフィルでコピーしたいのですが... REIKO 03/6/17(火) 10:32 お礼

【6047】オートフィルでコピーしたいのですが...
質問  REIKO  - 03/6/13(金) 16:51 -

引用なし
パスワード
   こんにちは。VBA初心者なので、
宜しくお願いします。

A列に文字が入力されいる最後の行まで
B1に入力した式をオートフィルで
コピーしたいのですが、
どうやって式をコピーするのかがわかりません。
表は以下のような感じです。

---------------------------
  A    B    C
1 00003 
2 00004
3 UA00
4 CK30
5 CK50
  ↓

---------------------------

1.上のようにA列には文字列が入力されており、
 入力されている最後の行は毎回変化します。

2.B列にはA列の値が4桁ならA列の値に""を
 追加した文字列が入るような式を、
 4桁以外なら文字列を数値として表示
 するような式を入力します。
 
 入力する式は以下の通りです

 "=If(LENB(A1)=4,A1&" ",value(A1))"

3.この式をB1からオートフィルでA列の最終行まで
 コピーしたいです。

以上のようなことをしたいのですが、
理解していただけましたでしょうか?

ご指導宜しくお願い致します。


   

【6049】Re:オートフィルでコピーしたいのですが...
回答  ichinose  - 03/6/13(金) 17:10 -

引用なし
パスワード
   ▼REIKO さん:
こんにちは。

>こんにちは。VBA初心者なので、
>宜しくお願いします。
>
>A列に文字が入力されいる最後の行まで
>B1に入力した式をオートフィルで
>コピーしたいのですが、
>どうやって式をコピーするのかがわかりません。
>表は以下のような感じです。
>
>---------------------------
>  A    B    C
>1 00003 
>2 00004
>3 UA00
>4 CK30
>5 CK50
>  ↓
>
>---------------------------
>
>1.上のようにA列には文字列が入力されており、
> 入力されている最後の行は毎回変化します。
>
>2.B列にはA列の値が4桁ならA列の値に""を
> 追加した文字列が入るような式を、
> 4桁以外なら文字列を数値として表示
> するような式を入力します。
> 
> 入力する式は以下の通りです
>
> "=If(LENB(A1)=4,A1&" ",value(A1))"
>
>3.この式をB1からオートフィルでA列の最終行まで
> コピーしたいです。
>
>以上のようなことをしたいのですが、
>理解していただけましたでしょうか?
>
>ご指導宜しくお願い致します。
>
>
A列には最低一つは、データが入っているとして、
'==============================================
Sub test1()
  Range("a1", Cells(Rows.Count, 1).End(xlUp)).Offset(0, 1).Formula = _
      "=If(LENB(A1)=4,A1&"" "",value(A1))"
End Sub

【6089】Re:オートフィルでコピーしたいのですが...
質問  REIKO  - 03/6/16(月) 13:16 -

引用なし
パスワード
   回答ありがとうございます。
教えて頂いたやり方でやってみた
のですが、私の質問の仕方が
悪かったようで、意図するものと
違うものになってしまいました。

"=If(LENB(A1)=4,A1&" ",value(A1))"
の式のA列の行数は変化させたいのです。
つまり
B1には
"=If(LENB(A1)=4,A1&" ",value(A1))"
B2には
"=If(LENB(A2)=4,A2&" ",value(A2))"
B3には
"=If(LENB(A3)=4,A3&" ",value(A3))"
と入力したいのです。
おわかりいただけますでしょうか?

【6090】Re:オートフィルでコピーしたいのですが...
発言  ichinose  - 03/6/16(月) 13:25 -

引用なし
パスワード
   ▼REIKO さん:
こんにちは。
>回答ありがとうございます。
>教えて頂いたやり方でやってみた
>のですが、私の質問の仕方が
>悪かったようで、意図するものと
>違うものになってしまいました。
>
>"=If(LENB(A1)=4,A1&" ",value(A1))"
>の式のA列の行数は変化させたいのです。
>つまり
>B1には
>"=If(LENB(A1)=4,A1&" ",value(A1))"
>B2には
>"=If(LENB(A2)=4,A2&" ",value(A2))"
>B3には
>"=If(LENB(A3)=4,A3&" ",value(A3))"
>と入力したいのです。
>おわかりいただけますでしょうか?
そういうご質問だと思いましたよ。
で、そうなるはずですが・・・・。

【6099】Re:オートフィルでコピーしたいのですが...
質問  REIKO  - 03/6/16(月) 15:49 -

引用なし
パスワード
   実際に作っているマクロでは
A2からデータが入っているので、
教えてもらった式を使って
下のように入力しているのですが、
これを使うと、
式がそのままセルに表示されて、
数字に変わりません。
しかも、全部同じ式がコピーされて
しまいます。どこが悪いのでしょうか??

Sub Macro1()
Range("A2", Cells(Rows.Count, 1).End(xlUp)).Offset(0, 1).Formula_
= "=If(LENB(A2)=4,A2&"",Value(A2))"
End Sub

【6101】Re:オートフィルでコピーしたいのですが...
回答  ichinose  - 03/6/16(月) 16:23 -

引用なし
パスワード
   ▼REIKO さん:
こんにちは。

>実際に作っているマクロでは
>A2からデータが入っているので、
>教えてもらった式を使って
>下のように入力しているのですが、
>これを使うと、
>式がそのままセルに表示されて、
>数字に変わりません。
>しかも、全部同じ式がコピーされて
>しまいます。どこが悪いのでしょうか??
>
>Sub Macro1()
>Range("A2", Cells(Rows.Count, 1).End(xlUp)).Offset(0, 1).Formula_
= "=If(LENB(A2)=4,A2&"""",Value(A2))"
'            ↑ダブルコーテションの数はちゃんとしてありますよね
'           まあ、してないとエラーになりますけど・・・
>End Sub
B列の書式が「文字列」になっているはずですが・・・。
書式は、標準にして下さいね、あるいは、マクロで標準にしてから上記のコードを実行してもかまいません。

>式がそのままセルに表示されて、
>数字に変わりません。
の現象は、セルの書式が「文字列」の場合は、確認されます。

【6103】Re:オートフィルでコピーしたいのですが...
お礼  REIKO  - 03/6/16(月) 16:59 -

引用なし
パスワード
   回答ありがとうございます!
B列の文字列を標準にしたら
数字は正しく表示されました。
しかし、B列の書式を標準にしてしまうと、
「UA00」や「CK30」などの4桁の文字列は
半角スペースをプラスしているので
その半角スペースまで消えてしまい、
A列と同じものが入力されてしまいます。
(実際にはB列には式が入っているので
確認できませんが、コピーして別のところに
貼り付けてみると、やはりスペースが
入っていないのですが...)

【6104】Re:オートフィルでコピーしたいのですが...
回答  ichinose  - 03/6/16(月) 17:16 -

引用なし
パスワード
   ▼REIKO さん:
こんにちは。

>回答ありがとうございます!
>B列の文字列を標準にしたら
>数字は正しく表示されました。
>しかし、B列の書式を標準にしてしまうと、
>「UA00」や「CK30」などの4桁の文字列は
>半角スペースをプラスしているので
>その半角スペースまで消えてしまい、
>A列と同じものが入力されてしまいます。
>(実際にはB列には式が入っているので
>確認できませんが、コピーして別のところに
>貼り付けてみると、やはりスペースが
>入っていないのですが...)
私の数式が間違っていたかもしれませんが、

>Range("A2", Cells(Rows.Count, 1).End(xlUp)).Offset(0, 1).Formula_
= "=If(LENB(A2)=4,A2&"" "",Value(A2))"
             ↑ここに空白いれておけば・・・・
ちゃんと空白は入りますよ。

試しにコードを実行した後、C列に「=len(a2)」と入力してみて下さい。
私のテストでは、A2が「UA00」ならC2には、「5」が入っていますが・・・。

【6119】Re:オートフィルでコピーしたいのですが...
質問  REIKO  - 03/6/17(火) 9:35 -

引用なし
パスワード
   こんにちは。
回答ありがとうございます。

>>Range("A2", Cells(Rows.Count, 1).End(xlUp)).Offset(0, 1).Formula_
>= "=If(LENB(A2)=4,A2&"" "",Value(A2))"
>             ↑ここに空白いれておけば・・・・
>ちゃんと空白は入りますよ。

「"" ""」のところに空白の入れてませんでした。
空白を入れたら確かにちゃんとできました!
ありがとうございます。

でも、どうしてVBAで記述するときは「"" ""」このような
記述をするのに、実際にB列に入力される式は

=IF(LENB(A2)=4,A2&" ",VALUE(A2))

のような式になっているのでしょうか??
初心者なのでまったく理解できないのですが...。

【6120】Re:オートフィルでコピーしたいのですが...
発言  ichinose  - 03/6/17(火) 9:50 -

引用なし
パスワード
   ▼REIKO さん:
こんにちは。

>>>Range("A2", Cells(Rows.Count, 1).End(xlUp)).Offset(0, 1).Formula_
>>= "=If(LENB(A2)=4,A2&"" "",Value(A2))"
>>             ↑ここに空白いれておけば・・・・
>>ちゃんと空白は入りますよ。
>
>「"" ""」のところに空白の入れてませんでした。
>空白を入れたら確かにちゃんとできました!
>ありがとうございます。
>
>でも、どうしてVBAで記述するときは「"" ""」このような
>記述をするのに、実際にB列に入力される式は
>
>=IF(LENB(A2)=4,A2&" ",VALUE(A2))
>
>のような式になっているのでしょうか??
>初心者なのでまったく理解できないのですが...。
これは、文法ですから、覚えるしかないですよ。

通常、文字列を変数に代入するとき、

dim a as string
a="abc"

というようにダブルコーテーションで囲みますよね!!
では、変数aに「"abc"」とダブルコーテーションも含めて代入したい場合、

a="""abc"""

というようにひとつのダブルコーテーションを表現するのにふたつの「""」を記述しなければなりません。

こういうきまりごとなんです。
又、そういう規則を決めないと文字として扱う「"」なのか、
文字列を囲い込む「"」なのか、VBAのプロセッサが理解できなかったと思います。

REIKOさんがVBAのプロセッサだったら、こんな規則がなくても違いが理解できますか?

【6123】Re:オートフィルでコピーしたいのですが...
お礼  REIKO  - 03/6/17(火) 10:32 -

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

>これは、文法ですから、覚えるしかないですよ。
>
>通常、文字列を変数に代入するとき、
>
>dim a as string
>a="abc"
>
>というようにダブルコーテーションで囲みますよね!!
>では、変数aに「"abc"」とダブルコーテーションも含めて代入したい場合、
>
>a="""abc"""
>
>というようにひとつのダブルコーテーションを表現するのにふたつの「""」を記述しなければなりません。
>
>こういうきまりごとなんです。

はい。こういう風に書いてもらえると
よくわかります。文字を代入をするのも
空白を代入するのも同じ法則なんですね。
とても勉強になりました。
ありがとうございました!!

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