VBA 使用列の最後の表示方法

このQ&Aのポイント
  • VBAを使用して、フォルダー名の一括変更を行う方法について教えてください。
  • 変更前のフォルダー名を変更後のフォルダー名に一括変更するためのVBAコードを作成したいです。
  • 使用されている列の最後(右端列)を利用して、変名を行うVBAコードについて教えてください。
回答を見る
  • ベストアンサー

VBA 使用列の最後の表示方法

フォルダー名の一括変更をVBAで行っています。 (変更前のフォルダー名を変更後のフォルダー名に全て(一括)変更) 変名に当たり目的別に処理が必要なために使用される列数が違いが生じますが   最終的な変更終了=完成型は使用されている列の最後(右端列)になります。 B5以下に変更前のフォルダー名が複数有る場合  使用されている列の最後の5行目以下に変更後の複数のフォルダー名が有ります。   (E列が最後の列ならE5以下、       最初がB5のフォルダ名がE5のフォルダ名に変更される。) VBAを作成するにあたり、変名は最終使用列(右端列)を利用するようにコードを   作成したいのですが、どのようなコードになりますか。 以下のコードでは、D列に固定されてしまいます。 Do While Range("b" & i).Text <> "" If Range("D" & i).Text <> "" Then ' 新フォルダ名がある場合のみ、名前変更を行う。  Name Range("A2").Text & Range("B" & i).Text As Range("A2").Text & Range("D" & i).Text End If i = i + 1 Loop       

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.1

最終列番号は (5行目なら) Cells(5, Columns.Count).End(xlToLeft).Column もしくは Cells(5, "A").End(xlToRight).Column で取り出せるので LastColumn = Cells(5, Columns.Count).End(xlToLeft).Column とかにして Range("D" & i).Text を Cells(i, LastColumn).Text にして試してみてください。

NuboChan
質問者

お礼

毎回、アドバイスありがとうございます。 先頭からチェックする以下で上手く処理できました。 Cells(5, "A").End(xlToRight).Column

関連するQ&A

  • (VBA) 同名フォルダーの存在をチェック

    以下のコード(Sub ⑤フォルダー名の変更())でフォルダー名の変更を行っています。 変名時に同名ファイルがある場合エラーが以下のコードでエラーがでます。   .GetFolder(Range("A2").Text & Range("B" & i).Text).Name = Cells(i, LastColumn).Text エラー無く処理したいので  同名があるばあいは、フォルダー名の末尾に(1)、(2)を付加したいのですが  同名があるかどうかは?どのように判定しますか ? Sub ⑤フォルダー名の変更() Dim i As Long Dim LastColumn As Single Dim LastColumn_ABC As String Dim MSG As String LastColumn = Cells(5, "B").End(xlToRight).Column LastColumn_ABC = Split(Cells(1, LastColumn).Address, "$")(1) MSG = MsgBox("B列フォルダー名が" & LastColumn_ABC & "列フォルダー名に変更されます!" & vbCrLf _ & "B," & LastColumn_ABC & "列に値がなければ、処理は行いません。", 257, "フォルダー名変更") If MSG = vbCancel Then Exit Sub i = 5 'subフォルダ名取得が5行目からフォルダー名を表示するため。 Do While Range("b" & i).Text <> "" If Cells(i, LastColumn).Text <> "" Then ' 新フォルダー名がある場合のみ、名前変更を行う。 With CreateObject("Scripting.FileSystemObject") .GetFolder(Range("A2").Text & Range("B" & i).Text).Name = Cells(i, LastColumn).Text End With End If i = i + 1 Loop MsgBox "変名処理が終了しました。" End Sub

  • EXCEL_VBAのコードのコード修正

    EXCEL_VBAのコードのコード修正での質問です。 現在以下のコードを利用しています。 (ほぼネットからの入手したコードで    私は、マクロに関しては初心者レベル以下です。) 変更したいのは、名前変更対象の列を現在E列固定なのを  名前変更対象列をマクロ途中で指定できるようにしたいのです。  つまり、イメージとしては    処理途中でダイアログが表示されて処理対象列を指定して    処理を開始するような。。。        現在、E,F,G列が候補となりますが将来増加する予定です。 どのようなにコードを追加すれば良いでしょうか ?    --------------------------------------- Sub フォルダー名の変更() ' Name "C:\Users\tmp.txt" As "C:\Users\tmp\tmp.txt"  ←移動となる。 ' B列現在のフォルダー名 C列=新しいフォルダー名(入力要) ' OKキャンセルボタンとデフォルトアクティブボタンの設定は数値の加算で行う。 '   1              第2ボタン256 = 1+256 = 257 Dim i As Long Dim atai As String   '処理列選択コード挿入予定 ------- ? atai = MsgBox("B列フォルダー名E列フォルダー名に変更されます!" & vbCrLf _ & "B,E列に値がなければ、処理は行いません。", 257, "フォルダー名変更") If atai = vbCancel Then Exit Sub i = 4 'subフォルダ名取得が4行目からフォルダー名を表示するため。 Do While Range("b" & i).Text <> "" If Range("E" & i).Text <> "" Then ' 新ファイル名がある場合のみ、名前変更を行う。 Name Range("a2").Text & Range("b" & i).Text As Range("a2").Text & Range("E" & i).Text End If i = i + 1 Loop End Sub

  • エクセルVBAについて教えてください。

    エクセル2007を使ったVBAについて2つ質問です。 1つ目の質問は、5列目の右端の数字を2列目の右端に持ってくるため、 Range("B2").End(xlToRight).Next.Select ActiveCell.FormulaR1C1 = Range("A5").End(xlToRight) というVBAを組んだのですが、2列目に空白が入っている場合うまく動かないため動くように したいのですが、どのように組めばいいのかわかりません。 例    A     B     C     D     E     F     G     H     I     J     K 1  2 【数値1】  □    □     □     1     2     3     4     5  3 4 5 【数値2】   6     7     8     9     10 6 ※□は空白 上記の例の場合、5行目の右端である10を2行目の空白を除いた右端である5の隣に持っていきたいです。 2つ目の質問ですが上記例の2列目の両端(1と5)を選択してDeleteする方法がわかりません。 2つの質問についてわかる方おりましたら教えていただけると助かります。 よろしくお願いしします。

  • Excel2003での改列方法

    こんにちわ。 私はWindowsXPのExcel2003のVBAでテキストファイル のデータ(カンマ区切り)を指定したセル列に代入 したいと思っているのですが、途中でセル列を変えたら データの続きから代入したいのですが上手くいきません。 この説明だと分かりづらいと思うので下記の例を見てください。 例) テキストファイルの中身: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,      :      ・ 90,91,92,93,94,95,96,97,98,99,100 セル列(B1:B10)に1~10の値を代入し、他のセル列(E1:E10)に11~20の値を,またその他のセルに30~のデータを10ずつ区切って代入したい考えています。下記のコードを実行したところ、 Do Until EOF(intFF) Line Input #intFF, tmp buf = Split(tmp, ",") Worksheets("sheet1").Range("B1:B10,E1:E10,H1:H10") = buf Worksheets("sheet1").Range("B1:B10,E1:E10,H1:H10") = WorksheetFunction.Transpose(buf) Loop Close #intFF 最初のB列にはきちんと代入されるのですが、E列では全てのセルに1が、H列にはB列の値(1~10)が代入されてしまいます。どうしたら良いのかお教え願います。

  • COUNTIFS関数をVBAで使用したい

    お世話になります。 よろしくお願いいたします。 Sheet1に集計表、Sheet2にデーターがあります。 氏名とコードが合致するデーターの個数を出したいのですが、コードの書き方がわかりません。 ご教示をお願いいたします。 Sheet1のB列の最後に小計や合計が入っているため、A列使用。 COUNTIFS関数でコンパイルエラーがでます。 Sheet1 A    B   C    D 氏名 氏名 コード 合致する個数 Sheet2 B    J     N 氏名  コード   数値 Sub test1() Dim i As Long, t As Long Dim wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("Sheet1") Set wS2 = Worksheets("Sheet2") i = wS1.Range("A" & Rows.Count).End(xlUp).Row t = wS2.Range("B" & Rows.Count).End(xlUp).Row Application.ScreenUpdating = False For i = 5 To i Range(wS1.Cells(5, "D"), wS1.Cells(i, "D")).Formula = _ "=COUNTIFS(wS2.Range("B7:B"&t),B5,wS2.Range("J5:J"&t),C5)" Next i Application.ScreenUpdating = True End Sub

  • VBAに関する質問です

    VBAの超初心者です。 現在勤めている会社で、労務管理をしております。 その業務中に以下のような状況にあり、悪戦苦闘しております。 全くの初心者ゆえ、かなり読みにくい質問となり恐縮ではございますが、何卒宜しくお願い致します。 現在、様々な種類の休業や休暇(EX.育児休業、介護休業、傷病休暇、・・・・たくさん種類があります)の取得日数を月単位で管理しています。 例えば、社員Aが4月に育児休業(コード=10)を15日取得すると、社員Aのデータとしてコードの10と日数の15が管理されます。管理できる数は1月ごとに1人当たり5個のコード&日数までです。 そこで、社員全体では以下のようなデータが取得できます。       A列  B列  C列   D列  E列  ・・・・・・・・・・・・・・・・・・ ●列  ●列 ------------------------------------------------------------------------ 1行目      4月(1) 4月(1) 4月(2) 4月(2) ・・・・・・・・・・・・・・・・・・ 3月(5) 3月(5)           コード  日数  コード  日数               コード  日数      ----------------------------------------------------------------- 2行目 社員A  10   23 3行目 社員B 4行目 社員C  12   15   11   4                  :         : ●行目 社員Y ●行目 社員Z  15   11 ------------------------------------------------------------------------ わかりにくい図で誠に申し訳ございません。例えば、B列の4行目には、社員Cが4月にコード12の休暇を取得したという情報が、C列の4行目にはその休暇が15日間だったという情報があります。そして、同じ月に2種類の休暇を取得した場合は、その横の列を使ってデータが入っていきます。 そこで、上の図のようなデータを取得したのち、社員全員について(6000名くらい)、コード10の休暇は何日で、コード11の休暇は何日でという値を右の列に出したいと思っております。コードは全てで20種類くらいあります。 VBAを勉強中ということで、これを自動的に計算するマクロを作りたいと思っております。 そのVBA作成のためのテスト版として、以下のような仮のデータについて、上記のような計算を実行する場合の記述をご教授願います。 --------------------------------------------------------------       A列   B列  C列  D列  E列  F列  G列  H列  I列      ------------------------------------------------------- 1行目                               10  11  12 2行目  10    5            11   16 3行目                     12   25 4行目  11    30  12   28   :   :   : 6000行目まで -------------------------------------------------------------- コードは10、11、12の3種類で、A、C、E列はコードを管理する領域、B、D、F列はコードに対する日数を管理する領域です。 G列にはコード10、H列にはコード11、I列にはコード12の日数を、それぞれの行ごとに表示させたいとかんがえております。 現在、以下のような方法でG列にコード10の日数を表示させることはできたのですが、H列とI列にもおなじようにそれぞれコード11と12の日数を表示させたいと考えております。しかも、できるだけシンプルに変数などをつかって短い記述でです。まだまだ勉強過程ですが、恥を承知で質問させて頂いております。 ================= sub 休業日数計算() Dim myrng As Range Dim g As Range Set myrng = Range("g2:g6000") For Each g In myrng Dim i As Integer For i = 1 To 3 If g.Offset(0, -8 + 2 * i).Value = Range("g1").Value Then g.Value = g.Value + g.Offset(0, -7 + 2 * i).Value Next Next g end sub ================= 根本的に思考の出発点から間違っているかもしれませんが、そこに対するご意見なども伺えれば幸いです。 何卒宜しくお願い致します。

  • B列の値を参照して、A列に連番を振る方法

    A・B・C列があり、A列には連番を、B列にはVLOOKUP関数が入っており、 C列には、B列の検索値が入っております。 B列は下記のVBAコードで同じ値をセル結合させています。 Sub 結合() Dim rngU As Range Dim i As Range Dim rngB As Range Dim Key As String Set rngB = Range("B2") Set rngU = Range(Range("B3") _ , Range("B6000").End(xlUp).Offset(1)) Application.DisplayAlerts = False For Each i In rngU If Not i.Text = Key Then If (Not i.Offset(-1) Is rngB) And _ (Not i Is rngB) Then Range(rngB, i.Offset(-1)).MergeCells = True End If Set rngB = i End If Key = i.Text Next i Application.DisplayAlerts = True End Sub そこで、A:3から連番を振りたいのですが、B列の決まった特定の結合セルの 隣のA列のセルもB列の決まった特定の結合セルと同数にセル結合させ、 連番を1つとしてカウントしたいのです。 また、A列にはB列同様にVLOOKUP関数が入っており、連番を振りたくないセルには 印が付くようにしています。 行数やB列の決まった特定の結合セル番地はランダムに変わるため、B列の結合セルで参照させるしか ないのかなっと思っております。 B列の特定の結合セルの値は決まっております。 上記のような処理を自動にさせるためのVBAが分かる方がいらっしゃいましたら、 是非ご教授お願いいたします。

  • VBAのTextBox表示について質問します。

    実は、MicrosoftのExcel内にありますVBAを使ってシート内に記載られている内容を Userform内にあるTextBoxに表示させたいと考えています。 UserformにあるTextBoxは、シートのセルに対してTextBoxを1個配置させています。 例えば・・・セルA1に入力されている文字をTextBox1に表示 セルB1に入力されている文字をTextBox2に表示 セルC1に入力されている文字をTextBox3に表示 セルD1に入力されている文字をTextBox4に表示 セルE1に入力されている文字をTextBox5に表示と言う様な感じで表示したいです。 セル表示範囲は、A1~E24までのセルでTextBoxもTextBox24まで存在します。 TextBox1.Text = ThisWorkbook.Sheets("Sheet1").Range("A1") TextBox2.Text = ThisWorkbook.Sheets("Sheet1").Range("B1") TextBox3.Text = ThisWorkbook.Sheets("Sheet1").Range("C1") TextBox4.Text = ThisWorkbook.Sheets("Sheet1").Range("D1") TextBox5.Text = ThisWorkbook.Sheets("Sheet1").Range("E1") TextBox6.Text = ThisWorkbook.Sheets("Sheet1").Range("A2") TextBox7.Text = ThisWorkbook.Sheets("Sheet1").Range("B2") TextBox8.Text = ThisWorkbook.Sheets("Sheet1").Range("C2") TextBox9.Text = ThisWorkbook.Sheets("Sheet1").Range("D2") TextBox10.Text = ThisWorkbook.Sheets("Sheet1").Range("E2") 以降~途中省略 TextBox120.Text = ThisWorkbook.Sheets("Sheet1").Range("E24") と言う様な・・・ 上記の、この様なコードでして行くと事は可能なんですが・・・ もっと短く出来ないでしょうか?

  • VBAで別々の2列のセルに色付け

    WINDOWS XP EXCELL 2003です。 いつもお世話になります。 参照図で A~D と E~H に分けています。 A2 数式が  =IF(B2="","",TEXT(B2,"mm")) E2 数式が  =IF(F2="","",TEXT(F2,"mm")) それぞれには 1(月)から12(月)です。 ※ 数値のみで 月 は含まれません。                      ユーザー定義 mm/dd です。   御指導を仰ぎたいのは A列 と E列 のセルの色づけのマクロを教えていただけませんか。 色コードは後で私が追加します。

  • VBA  A列のみにしか入力できないようにする

    いつも大変お世話になっております。 Excel2003を使用してます。 メールをExcelにコピペして、 A列のみに表示されるようにしたいと思っております。 例えば、 A,B  ,件名テスト 本文 本文 担当者名,文書名  ,システム名 メール終わり このような状態だったとして、 B列に記入されたことも、A列に結合し、 A列以外には何も記入されていないようにしたいです。 ↓ 変換後 A,B 件名テスト 本文 本文 担当者名文書名 システム名 メール終わり Worksheet_Changeで実行すべきかと思いますが どのようにすべきでしょうか? TargetをRangeオブジェクトに入れなおして ForEachループで回すとかでしょうか? どうしたら良いのか分からず困っているのが 「A列以外を変更した」と判断する記述です。 コピペした際、A列、B列ともに変更しており If Application.Intersect(Target, Range("A:A")) Is Nothing Then としてしまうと、TargetにA列が含まれていたら実行しなくなってしまいます。 「A列以外を変更した場合」という判定はどのようにすべきでしょうか? 以上、よろしくお願い致します。

専門家に質問してみよう