• 締切済み

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 = "" を 無理やり動かすと無限ループにはなりますが処理はします。 とりあえず今週中に入力はできるようにといわれています。どうかお知恵をお貸しください。

みんなの回答

  • jin34
  • ベストアンサー率80% (17/21)
回答No.2

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)
回答No.1

>workA = Range("D5:F5") この時点で、セルデータは配列(workA)に格納されます。 配列という塊に対して文字列関数を使用しているのでエラーになります。 (プログラミング経験者であれば理解できるかと思います。) >Range(numO) = workA 配列の値をセルに格納するには、配列と同じ形のセルが必要です。 形が違う器にデータを入れる事は出来ません。 >セルから取得した文字列には何か特別な宣言でもいるのですか? 複数のセルの値を代入しているので、文字列では無くて「配列」として格納されます。 それを理解した上で使用すると問題を回避出来るでしょう。 SET workA = Range("D5:F5") とすると、単なる配列では無くてオブジェクト(セル)として扱う事が出来ます。 >どうかお知恵をお貸しください。 プログラムの詳細が解らないので具体的な修正箇所についてはアドバイスできませんが、参考にして下さい。

hiro80
質問者

補足

ありがとうございます。なるほど、配列になってしまうのですね。早速やってみます。 事故の怪我でで現場仕事ができず一昨日からマクロのVBをいじらされてます。ちなみにそういう会社ではないので周りにも分かってる人はいないです。 なんとかがんばってみます

関連するQ&A

  • エクセルマクロ セルの貼り付けについて

    マクロ初心者でわからないことばかりで困っております。 For i = 1 To 721 Step 80 Sheets("Sheet2").Activate Range("G3").Select ActiveCell.FormulaR1C1 = i Range("A1:D80").Select   Selection.Copy Sheets("Sheet3").Activate このあとにコピーしたもの「Range("A1:D80").Select」をセルに貼り付ける時に一回ごとに80行ずつずらして貼り付けたいのですが、そのような場合は どのようにRange指定して貼り付ければよろしいのですか? sheet2で演算した結果をsheet3のセルA1からA721まで貼り付けたいのです。一回の演算で80行まで計算されます。 わかりずらくて申し訳ありません。

  • エクセルのマクロについて

    エクセル97でマクロを組んで下記作業を行いたいと考えていますが(実際にやりたい事から抜粋した内容です)、不具合が起こっています。 ~やりたい事~ コマンドボタンを押すとあるシートのセルをコピーして、違うシートに貼り付ける。 ~不具合内容~ (1)普通にマクロを実行すると問題ないが、(2)コマンドボタンを使用するとエラーが起こる。 エラー内容は、 「実行時エラー'1004' RangeクラスのSelectメソッドが失敗しました。」 と言う内容です。 ~(1)のVB表記~ Sub Macro1() Sheets("sheet1").Select Range("A1").Select Selection.Copy Sheets("sheet2").Select Range("A1").Select ActiveSheet.Paste End Sub ~(2)のVB表記~ Private Sub CommandButton1_Click() Sheets("sheet1").Select Range("A1").Select (←ここでエラーが発生します) Selection.Copy  Sheets("sheet2").Select Range("A1").Select ActiveSheet.Paste End Sub ~質問事項~ 1)(2)の表記の何が原因でエラーが起こっているのでしょうか? 2)エラーが起きない為にはどのようにしたら良いでしょうか?

  • エクセルで変数を用いてセルの移動

    エクセルにおいて、たとえば上から順に検索していき、14番目をほかのシートにコピーしたいときに、以下の記述ではまずいでしょうか。 基本的にrangeやCellsの中に変数を組み込む方法がわかりません。 以下の方法で行うと、エラーが帰ってきました。 For J = 1 To 100 + 1 Select Case J Case 14 Sheets("kanryou").Select Range(Cells(J + Endd, 1), Cells(J + Endd, 1)).Select Selection.Copy Sheets("nukitori").Select Range(Cells(K, 1), Cells(1, 1)).Select ActiveSheet.Paste Application.CutCopyMode = False K = K + 1 Case Else End Select Next

  • inputboxではセル番地が指定できず困っています。

    EXCEL2000のVBAで、フィルターオプション機能を自動化したいのですが、 抽出先が変動するので、inputboxでセル番地を選択しようとすると、セルを選択することができず、自分で「A1」などと入力すると、きちんとA1に抽出結果が出てくるのですが、自分でセル番地をinputboxに入力するのではなく、マウスでセル番地を指定したいのですが、どのような方法をすればよかったでしょうか? よろしくお願いします。ちなみ作ったVBAは以下のとおりです。(複数の表から同じ条件で抽出し、inputboxで指定したセル番地に抽出結果を出し、その右側に続けて抽出結果を貼り付けていくという感じで作っています) Sub 抽出() Dim Shouhin1 As String Dim Shouhin2 As String Dim Shouhin3 As String Shouhin1 = InputBox("抽出先を指定してください") Shouhin2 = "d" & Mid(Shouhin1, 2, 5)’二つ目の表の抽出先を指定 Shouhin3 = "g" & Mid(Shouhin1, 2, 5)’3つ目の表の抽出先を指定 Sheets("抽出先").Select Sheets("データ").Range("A5:c44").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("データ").Range("B1:B2"), CopyToRange:=Range(Shouhin1), _ Unique:=False Sheets("データ").Select Sheets("抽出先").Select Sheets("データ").Range("d5:f44").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("データ").Range("B1:B2"), CopyToRange:=Range(Shouhin2), _ Unique:=False Sheets("データ").Select Sheets("抽出先").Select Sheets("データ").Range("g5:i44").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("データ").Range("B1:B2"), CopyToRange:=Range(Shouhin3), _ Unique:=False End Sub

  • エクセルのマクロで結合セルに値を貼り付けたい

    みなさん、お知恵をください。 Excel2000です。 Sheets(1)に A:D までを結合したセルを30行ぐらい用意した状態で Sheets(2)の 単一セル A1,A2,A3,A4,A5・・・・とつづく変数 HENSUUを 貼り付けたいのです。*HENSUUは値のみの文字であったり数字です。 もちろん下記の過去質問はチェック済みです。 http://oshiete1.goo.ne.jp/qa2197173.html 物まねで作成しましたがエラーです。 Sheets(2).Select HENSUU = Range("A65536").End(xlUp).Row  ’変数最終行定義 Sheets(1).Range(Cells(1, 1), Cells(HENSUU, 1)).Value = Sheets(2).Range(Cells(1, 1), Cells(HENSUU, 1)).Value すみません。お知恵を拝借させて下さい。 よろしくお願いします。

  • (変数)を使った特定の範囲の選択について

    下記のように、行を変数として、グラフの元になるデータの範囲(A列とC列)を指定した行までとしたいのですが、なかなかうまくいきません・・・("A1:セル番号,C1:セル番号1")の行ところでエラーになってしまいます。 どなたかよい方法を教えていただけませんでしょうか?お願いします。 Dim 行 As Integer Dim セル番号 As Variant Dim セル番号1 As Variant 行 = 7 セル番号 = "A" & 行 セル番号1 = "C" & 行 ActiveSheet.ChartObjects("グラフ11").Activate ActiveChart.ChartArea.Select ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A1:セル番号,C1:セル番号1"), _ PlotBy:=xlColumns ActiveWindow.Visible = False Windows("マクロ練習売上と見み.xls").Activate Range("A1").Select

  • エクセルマクロについて助言下さい。

    エクセルマクロについて助言下さい。 ★やりたい事 シート名を指定しアクティブにする BOOOKに複数のセルがあり、シート名は日付(1・2など) 但し、必ず連続ではなく1~31までのシートが存在します。 現在のマクロ↓ シート名を取得し関数で指定のシートが存在するか確認しています。 作業シートのC1セルが0で指定シートなし 0でないで指定シートあり(処理開始)としてます。 作業2のI3セルに日付データがあります。 Sub 抽出() 'シート名を取得する Sheets("作業").Select Dim i As Integer Dim mySheetCnt As Integer Dim mySheetNam As String    mySheetCnt = ThisWorkbook.Sheets.Count For i = 1 To mySheetCnt mySheetNam = Sheets(i).Name Sheets("作業").Cells(i, 1) = mySheetNam Next i   Range("A1").Select If ActiveCell.Value = "" Then 'A1が空白の場合の処理 MsgBox "指定の日付のシートが存在しません" Exit Sub End If Sheets("作業").Select Range("C1").Select If ActiveCell.Value = 0 Then 'C1が0の場合の処理 MsgBox "指定の日付のシートが存在しません" Exit Sub End If Sheets("作業2").Select Range("I3").Select Sheets(ActiveCell.alue).Select End Sub このコードだと3と指定すると左から3枚目にあるシートが選択されます。 3枚目ではなくシート名が 3 を選択したいのです。。 分かりにく説明で申し訳ありませんが、教えてください。

  • セル指定の文字列を、直接ではなく変数にしたい。

    ExcelのVBEなのですが、以下のようなコードがあります。 If Range("c_Reporter").Value = "" Then   <省略> Range("c_Reporter").Activate EndIf c_Reporterという名前のセルの値を見て、このセルに操作を行うのですが、セルの名前をいちいち書くのが面倒です。 たとえば、以下のようにセル名を格納した変数を使いまわしたいのですが、エラーになってしまいます。何か指定の方法があったように思うのですが、オンラインヘルプで探せませんでした。 Dim sTargetCell As String sTargetCell="c_Reporter" If Range(sTargetCell).Value = "" Then   <省略> Range(sTargetCell).Activate EndIf このような変数の遣い方のやり方を教えてください。 また、もっとスマートなやり方でも結構です。

  • EXCEL VBA セルからファイル名を読み込む

    EXCEL VBAについての質問です 同じ処理を名前の違う複数のファイルで行いたいと思っています そこで、セルA2へファイル名の『○○.xls』○○部分だけをそれぞれのファイルに書き込んでおき、マクロは共通にしてファイル名をそれぞれのファイルから読み込んで実行したいと思っています。 良い方法を教えてください。 Workbooks("200809.csv").Activate Sheets("200809").Select Range("C3:C33").Copy Windows("○○.xls").Activate'←ここをファイルにあわせて変更できる形にしたい Sheets("報告書").Select Range("G5:G35").Select ActiveSheet.Paste Windows("200809.csv").Activate Range("K3:K33").Copy Windows("○○.xls").Activate’←ここ Sheets("報告書").Select Range("I5:I35").Select ActiveSheet.Paste Workbooks("200809.csv").Close SaveChanges:=False よろしくお願いします。

  • エクセルVBAで範囲を変数で設定する方法?

    Dim i As Integer For i = 1 to 50 とした場合、 セルであれば Sheets("Sheet2").Cells(i, 2).Value = Sheets("Sheet1").Cells(i, 2) のように変数を使えますが、範囲に使う場合にはどう書けばいいのでしょうか? 例えば、 Sheets("Sheet2").Range("A1:G1").Value = Sheets("Sheet1").Range("A1:G1") のような式で、行数を変数にする場合です。 よろしくお願いします。