- 締切済み
Excelのセルから変数に文字列を取得するとき
VBの超初心者です。PHPとSQLは多少使えます。 事故のため現場から事務所に移らされて、作業日報のデータベース化を命じられたのですが、何がなにやら分かりません。手探りでやっているのですがどうしても先に進めません。 エクセルのセルから作業内容の文字列を取って、作業がある間それを繰り返したいのですが以下の命令でエラーメッセージが出ます。 Excelは2000です。 Sub macroAC() Sheets("A班").Select Dim a, o, ss Dim workA, workO, numA, numO workA = Range("D5:F5") ' A班作業を取得 'ss = Left(workA, 1) '<<形が違いますというエラーがでます>> 'ss = Len(workA) '<<形が違いますというエラーがでます>> a = 5 o = 19 Do Until workA = "" 'A班作業があるあいだ<<形が違いますというエラーがでます>> Sheets("事務所").Select ' 事務所シートのセルnumOにA班作業を書き込み numO = "C" & o & ":Z" & o Range(numO) = workA '<<形が違いますというエラーがでます>> a = a + 1 o = o + 1 Sheets("A班").Select numA = "D" & a & ":F" & a workA = Range(numA) Loop Sheets("事務所").Select End Sub セルから取得した文字列には何か特別な宣言でもいるのですか? ちなみに Do Until workA = "" を 無理やり動かすと無限ループにはなりますが処理はします。 とりあえず今週中に入力はできるようにといわれています。どうかお知恵をお貸しください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- jin34
- ベストアンサー率80% (17/21)
D~F列5行目以降の情報をC~Z列19行目以降で使う内容と理解しました。 セル範囲を配列で取得するのではなく(=SET workA = Range("D5:F5)にせずに) コピー&貼り付けでいいのではないでしょうか。 Sub macroAC() Dim a, o Sheets("A班").Select a=5 o=19 Do Until Range("D"&a)="" And Range("F"&a)="" Range("D"&a,"F"&a).Copy Sheets("事務所").Range("C"&o,"Z"&o) a=a+1 o=o+1 Loop Sheets("事務所").Select End Sub がんばってください。
- hana-hana3
- ベストアンサー率31% (4940/15541)
>workA = Range("D5:F5") この時点で、セルデータは配列(workA)に格納されます。 配列という塊に対して文字列関数を使用しているのでエラーになります。 (プログラミング経験者であれば理解できるかと思います。) >Range(numO) = workA 配列の値をセルに格納するには、配列と同じ形のセルが必要です。 形が違う器にデータを入れる事は出来ません。 >セルから取得した文字列には何か特別な宣言でもいるのですか? 複数のセルの値を代入しているので、文字列では無くて「配列」として格納されます。 それを理解した上で使用すると問題を回避出来るでしょう。 SET workA = Range("D5:F5") とすると、単なる配列では無くてオブジェクト(セル)として扱う事が出来ます。 >どうかお知恵をお貸しください。 プログラムの詳細が解らないので具体的な修正箇所についてはアドバイスできませんが、参考にして下さい。
補足
ありがとうございます。なるほど、配列になってしまうのですね。早速やってみます。 事故の怪我でで現場仕事ができず一昨日からマクロのVBをいじらされてます。ちなみにそういう会社ではないので周りにも分かってる人はいないです。 なんとかがんばってみます