マンガでよめる痔のこと・薬のこと

エクセルVBAを勉強し始めたばかりの超初心者です。
以下のような表を作成したいのですが、良い方法が思いつきません。
どうか御教授の程お願いいたします。

●記号(A~Eとして)の数(可変)分だけ列の上から順にその記号を入力する。 
例えばA:1,B:0,C:3,D:5,E:2ずつある場合、列Cに縦に"ACCCDDDDDEE"
という感じです。

表現が分かりづらいかもしれませんが宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

>エクセルVBAを勉強し始めたばかりの超初心者です。



超初心者(謙遜でなければ)がいきなりこんな面倒なもの、
(とは言っても慣れれば簡単ですが)をしてもあまり勉強にならないような気がします。
それよりも、Workbook,Sheet,Rangeオブジェクトの関係、For~ Next
セルの書式設定などもっと基本的なことから学ぶべきではないかと。。。
 
で、本題。

セルA1に A:1,B:0,C:3,D:5,E:2 があり
これをC列の一行目から質問のように展開する場合。

'-----------------------------------------------
Sub Test()
 Dim myStr
 Dim S
 Dim K As Integer
 Dim N As Integer

 Columns("C:C").ClearContents

 myStr = Split(Range("A1").Value, ",")

 For K = LBound(myStr) To UBound(myStr)
   S = Split(myStr(K), ":")
   If S(1) > 0 Then
     For N = 1 To S(1)
       Cells(Rows.Count, "C").End(xlUp).Offset(1).Value = S(0)
     Next N
   End If
 Next K

 Range("C1").Delete xlShiftUp

End Sub
'-------------------------------------------------

エラーチェックは入れてありません。
分からないコマンドはちゃんとヘルプを参照すること。
また、変数名は適当につけてありますが、通常はその変数が
何を表わしているか分かるような名前にしなければいけません。
以上。
 

 
    • good
    • 0
この回答へのお礼

大変丁寧にご回答くださいましてありがとうございました!
質問文が分かりづらかったと思いますが、「数(可変)分だけ列の上から順にその記号を入力する」という点について知りたかったものでしたから、とても助かりました。
勉強させていただきました!

お礼日時:2008/04/19 21:37

[イミディエイト]


? CutStr("A:1,B:0,C:3,D:5,E:2", ",", 1)
A:1
? CutStr(CutStr("A:1,B:0,C:3,D:5,E:2", ",", 1), ":", 1)
A
? CutStr(CutStr("A:1,B:0,C:3,D:5,E:2", ",", 1), ":", 2)
1
? String(CutStr(CutStr("A:1,B:0,C:3,D:5,E:2", ",", 1), ":", 2), CutStr(CutStr("A:1,B:0,C:3,D:5,E:2", ",", 1), ":", 1))
A
? String(CutStr(CutStr("A:1,B:0,C:3,D:5,E:2", ",", 2), ":", 2), CutStr(CutStr("A:1,B:0,C:3,D:5,E:2", ",", 2), ":", 1))

? String(CutStr(CutStr("A:1,B:0,C:3,D:5,E:2", ",", 3), ":", 2), CutStr(CutStr("A:1,B:0,C:3,D:5,E:2", ",", 3), ":", 1))
CCC
? String(CutStr(CutStr("A:1,B:0,C:3,D:5,E:2", ",", 4), ":", 2), CutStr(CutStr("A:1,B:0,C:3,D:5,E:2", ",", 4), ":", 1))
DDDDD
? String(CutStr(CutStr("A:1,B:0,C:3,D:5,E:2", ",", 5), ":", 2), CutStr(CutStr("A:1,B:0,C:3,D:5,E:2", ",", 5), ":", 1))
EE

このテストで判るように区切り子で区切られた文字列を分割して取り出す関数 CutStr() の類を自作すれば簡単に。
なお、CutStr()では Split を利用しています。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
私の質問の仕方が悪く、知りたかった内容とは異なりましたが、
文字列から数値と文字を切り分けるという方法を教えていただきました。
ありがとうございました。

お礼日時:2008/04/19 21:33

どのようにしたら『A:1,B:0,C:3,D:5,E:2』を『ACCCDDDDDEE』に置き換えることが可能か考えて見ましょう



『A:1,B:0,C:3,D:5,E:2』は『文字』『:』『数字』の組み合わせが『,』で区切られています
ならば
1 文字列から文字を探す関数
2 文字列の所定の位置から切り出す関数
の2つのを使えば出来そうです

切り出された文字列を見てみると『文字』『:』『数字』となっているので『:』の前と後ろを切り出せばよさそうです
切り出した 文字を数字分繰り返す関数を探すか 自前で作成しましょう

エクセルの表の操作は Rangeオブジェクトや Cell関数で シートのセルにアクセス出来ますよ

関連する関数などは InStr, Mid, Split, For Each などでしょう
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
私の質問の仕方が悪く、申し訳ございませんでした。
”数(可変)分だけ列の上から順にその記号を入力する”という点について知りたかったものですから…。
しかし、文字の切り出すという考え方があるということを教えていただきました。
大変勉強になりました。
ありがとうございました。

お礼日時:2008/04/19 21:30

こんばんは



>数(可変)分
とはどう入力させるのでしょう?
入力された(されている)数値分Forで回してみてはどうでしょう?

private function hanpuku(byval 入力値 as long, _
              byval 反復させる文字 as string)as string
 dim buff as String
 dim i as Integer
 For i = 1 to 入力値
  buff = buff + 反復させる文字
 Next
 hanpuku = buff
end function

#エディタも使ってないのでコンパイルエラーがでてもご愛嬌ということで…

みたいな感じで
質問文からは入力の指定がされていないためこれぐらいしか回答できません。
もろに研修or課題っぽい内容なので周りの方に聞いたほうが早いかと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
私の質問の仕方が悪く、申し訳ありませんでした。

お礼日時:2008/04/19 21:20

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング