Excel VBAについてお尋ねします。

Excelで勘定元帳を作っているのですが、シート名に
「1-現金」
「2-普通預金」
などとなっています。

この場合に、Excel VBAで
「-」の前後、つまり、「1-現金」の場合は
「1」「現金」を取り出すコマンドをご存知の方教えてください。

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

A 回答 (4件)

すみません。

間違えてました。

正しくは下記です。

Dim strValue As String
strValue = ActiveCell.Value

Dim i
i = InStr(1, strValue, "-") ' "-"の位置

Dim Bangou As String
Dim Data As String
Bangou = Left(strValue, i - 1) '番号の部分
Data = Mid$(strValue, i + 1) 'データの部分
           ここを間違えてました。
    • good
    • 0

以下のコードを試して見てください。


単純明快です。


Dim strValue As String
strValue = ActiveCell.Value

Dim i
i = InStr(1, strValue, "-") ' "-"の位置

Dim Bangou As String
Dim Data As String
Bangou = Left(strValue, i - 1) '番号の部分
Data = Mid$(strValue, i + 1, 3) 'データの部分
    • good
    • 0

科目はたくさんあると思いますので、蛇足ですが。

。。

Dim mySht As String 'シート名
Dim myKanjoNo, myKanjoName As String '科目、科目名
mySht = Sheets(1).Name 'シート番号を指定
myKanjoNo = Left(mySht, InStr(mySht, "-") - 1)
myKanjoName = Right(mySht, Len(mySht) - InStr(mySht, "-"))
    • good
    • 0

一番目のシートを選択した後、


Sheets(1).Nameを参照することでシート名が取得できます。
「(1)はn番目です」
これをmidb$で分解してください。

ここでは Dim strTemp As String で宣言した文字列変数で受け取ったとします。
strTemp = Sheets(1).Name

’数字の取り出し
変数a = Midb(strTemp,1,1)
’科目名の取り出し
変数 = Midb(strTemp,3,30)


EXCEL2000ならSplitが利用できるので
セパレータに"-"を指定すると
文字列を簡単に分解できます。
    • good
    • 0

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

このQ&Aと関連する良く見られている質問

Q「Excel VBA」 Webクエリ マクロ「実行時エラー"1004"ファイルにアクセスできませんでした」

Webクエリを使って、「Yahooファイナンス」から日経平均株価の時系列データを取得したいのですが、うまくいきません。(TT)
下記に全コードを記載しますので、ご回答よろしくお願いします。

Dim url As String
Dim lastrow As Integer
Dim i As Integer

Sub Calc()
'価格データを取得するマクロ

'このマクロ内で用いる各変数を宣言
Dim code As String
Dim day_s As Integer, month_s As Integer, year_s As Integer
Dim day_e As Integer, month_e As Integer, year_e As Integer
Dim row_length As Integer

'変数に各値を代入
code = "998407.o" '株価コード
day_e = 31 '取得終了日
month_e = 12 '取得終了月
year_e = 2005 '取得終了年
day_s = 1 '取得開始日
month_s = 1 '取得開始月
year_s = 2005 '取得開始年

'価格データを取得
For i = 0 To 365 * 0.65 Step 50

'変数にURLを代入
url = "URL;http://table.yahoo.co.jp/t?s=" & code & "&a=" & month_s & "&b=" & day_s & "&c=" & year_s & "&d=" & month_e & "&e=" & day_e & "&f=" & year_e & "&g=d&q=t&y=" & i & "&z=" & code & "&x=.csv"

'1回目の繰り返しの場合
If i = 0 Then
lastrow = "4"
Call Get_Data

'価格データが取得できなかった場合、マクロを終了させる
    If Range("B4") = "" Then
Exit Sub
End If

'2回目以降の繰り返しの場合
Else
lastrow = Range("B4").End(xlDown).Row + 1
Call Get_Data

'見出しのセルを削除
Range("B" & lastrow, "H" & lastrow).Delete
row_length = Range("B4").End(xlDown).Row

'価格データが取得期間分存在していなかった場合、その時点で繰り返しを終了させる
If row_length - lastrow < 49 Then
Exit For
End If
End If
Next
End Sub

Sub Get_Data()

With ActiveSheet.QueryTables.Add(Connection:=url, Destination:=Cells(lastrow, 2))
.Name = "t?s=998407.o&g=d"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "22"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With

Range("B5:F54").Select
Selection.Sort Key1:=Range("B5"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
End Sub

Calcマクロを実行すると、 
「実行時エラー"1004"ファイルにアクセスできませんでした。次のいずれかを行ってください。」 というエラーが出て止まってしまいます。

デバッグをすると、「Get_Dataマクロ」内の、
.Refresh BackgroundQuery:=False が黄色になります。

ステップインしても、やっぱり、
.Refresh BackgroundQuery:=False の所でエラーが出ます。(TT)

どうしても解決したい内容なので、
少しでも「解決の可能性」があれば、なんでも試してみたいと思っていますので、どうぞお気軽に回答お願いします。

力を貸しください。よろしくお願いします。

Webクエリを使って、「Yahooファイナンス」から日経平均株価の時系列データを取得したいのですが、うまくいきません。(TT)
下記に全コードを記載しますので、ご回答よろしくお願いします。

Dim url As String
Dim lastrow As Integer
Dim i As Integer

Sub Calc()
'価格データを取得するマクロ

'このマクロ内で用いる各変数を宣言
Dim code As String
Dim day_s As Integer, month_s As Integer, year_s As Integer
Dim day_e As Integer, month_e As Integer, year_e As Integer...続きを読む

Aベストアンサー

試したところ、ちゃんと動作しましたのでコードの問題ではないでしょう。

で、検索したところ同じような質問があり、
インターネット一時ファイル、履歴を削除したら解決したようです。
下記URLを覗いてみてください。

http://okwave.jp/qa2884378.html

外しましたらご容赦願います。
 

Q「VB6」、「VBA」、「VB.NET」と仲間分けするとしたら

VBとVBAを勉強中です。

コードの書き方で仲間分けをするとしたら
・「VB6」、「VBA」 
・「VB.NET」

という感じでしょうか?

Aベストアンサー

VBとVBAは文法的な点(この辺は学びやすい)が同じと言うだけで、勉強するオブジェクト、プロパティ・メソッドは別なので(違うので)別物と考えること。それらは個別に勉強をしないとならない。VBのエキスパートも、当面は調べまくらないとVBAはコードを書けないでしょう。
ただしコードでVBからエクセルに入るとか、オブジェクトライブラリを用意するとエクセルでも出来たり、VB.NETでもVSTOとかオフィスを扱えたりする。
一応質問の線の仲間分けを頭に置いて、勉強して、数年後に振り返って考えてみてください。
質問のような仲間分けのシェーマが判っても、3つとも勉強して無い人には、コードを書こうとすると手も足も出ず、おまじない(気休め)にしかなら無い。
>VBとVBAを勉強中です。
「VB.NET」の方が良くは無いか?誰かにアドバイスをもらうこと。

QExcel-VBAの配列「Public Const」について

Excel-VBAの配列「Public Const」について
変数「AA」に"メロン"を定義する方法として次の記述で対処しているのですが、
配列で定義する書き方が解りません!?
Public Const AA As String = "メロン"
配列変数「BB」に「"栗", "桃", "メロン"」を定義をしたいのですが、
どの様に記述すれば良いか教えて下さい。
以上

Aベストアンサー

下記なら可能のようだが
Public aa
Sub test01()
aa = Array("桃", "栗", "柿")
End Sub
Sub test02()
test01
For i = 0 To 2
MsgBox aa(i)
Next i
End Sub
何処がこれでは質問に適合してないのか、説明したら。聞きたいことが明確になり、具体的になるだろう。
aaはバリアント変数。
http://pc.nikkeibp.co.jp/article/NPC/20070803/279065/
に解説が有る。
バリアント変数利用が気に食わないのか?
aa()={"a","b","c"}のような書き方が、VBAでも出来ないかと聞きたいのか。

Q「Excel VBA」の事でお伺いします。

「Excel VBA」の事でお伺いします。

1、ExcelVBEで「ユーザフォーム」を挿入する。
2、出来る「ユーザフォーム」は「モーダルダイアログ」で「タイトルバー」付です。

3、これを「モードレスダイアログ」に変更するにはプロパテイの変更で出来るのですが。

4、「タイトルバー」の無い形に変える方法が分かりません。

5、目的はユーザによる「ユーザフーム」を移動・サイズ変更させたくないわけです。

Aベストアンサー

行(列)番号に対する特別なイベントはありませんが、
それに対してどのようなイベントを使いたいのでしょうか。
例えば、行(列)番号をクリック選択した時のイベントであれば
SheetのSelectionChangeイベントで代用はできます。

下記のコードで、
行番号クリック(ドラッグして複数行)
列番号クリック(ドラッグして複数行)
セル範囲選択など試してみてください。

'------------------------------------------------------ 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Target.Columns.Count = Columns.Count Then
    MsgBox Target.Address(0, 0) & " 行を選択しました"
 ElseIf Target.Rows.Count = Rows.Count Then
    MsgBox Target.Address(0, 0) & " 列を選択しました"
 Else
    MsgBox Target.Address(0, 0) & " のセル範囲を選択しました"
 End If
End Sub
'----------------------------------------------------
 
何れにしろ、行(列)番号に対してどのようなイベントを使いたいのか提示した方がいいでしょう。
さすれば、いろいろな案が回答されることでしょう。
以上です。
 

行(列)番号に対する特別なイベントはありませんが、
それに対してどのようなイベントを使いたいのでしょうか。
例えば、行(列)番号をクリック選択した時のイベントであれば
SheetのSelectionChangeイベントで代用はできます。

下記のコードで、
行番号クリック(ドラッグして複数行)
列番号クリック(ドラッグして複数行)
セル範囲選択など試してみてください。

'------------------------------------------------------ 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Target.Co...続きを読む

QExcel VBA「If else」の使い方

Excelで管理台帳を作っています

コマンドボタンをクリックすると、元データ「受給者情報」シートから今月利用終了となる人のリストを「利用終了者」シートに抽出できるようにしています
正しい作り方ではないのかもしれませんが、これでちゃんと抽出できているから抽出自体はこれでも問題ないと思います(^_^;)

それはいいのですが、対象となる人がいない場合、抽出先の「利用終了者」シートにはタイトル行しか出ません。

それでも構わないのですが、できたら抽出データがない場合(A2セルより下のデータがない場合)は、「今月で終了の利用者はいません」とメッセージを出し、「top_page」シートに移動させたいのです

そのやり方がうまくいきません

現時点はこのように入れています


Private Sub CommandButton2_Click()
Worksheets("利用終了者").Select
Worksheets("利用終了者").Range("A:M").Clear
With Worksheets("受給者情報")
.Range("A:M").Copy Worksheets("利用終了者").Range("A1")
.Range("A:Q").AdvancedFilter _
Action:=xlFilterCopy, _
criteriarange:=.Range("U1:V3"), _ 
CopyToRange:=Worksheets("利用終了者").Range("A:M"), _
unique:=False
End With
MsgBox "今月末で終了の利用者です!", vbOKOnly + vbInformation, "確認"
If MsgBox("印刷しますか?", vbYesNo + vbQuestion, "印刷") = vbNo Then
Exit Sub
End If
Worksheets("利用終了者").PrintOut
Sheets("top_page").Select
Range("a1").Select
End Sub




If elseを使うんだろうな、というのは何となくわかるのですが、どこにどう入れたらちゃんと反応するのかわかりません。

一度、

 (前略)
If Application.CountA(Range("A2")) = 0 Then
MsgBox "今月末で終了の利用者はいません", vbOKOnly + vbInformation, "確認"
Else
MsgBox "今月末で終了の利用者です!", vbOKOnly + vbInformation, "確認"
If MsgBox("印刷しますか?", vbYesNo + vbQuestion, "印刷") = vbNo Then
Exit Sub
End If
Worksheets("利用終了者").PrintOut
End If
Sheets("top_page").Select
Range("a1").Select
End Sub

と入れてみたのですが、これだと2行目以降もデータがあっても、「今月末で終了の利用者はいません」となってしまいます

2行目以降にデータがある場合は「今月末で終了の利用者です!」とメッセージボックスを出し、2行目以降にデータがない場合は「今月末で利用終了の利用者はいません」とメッセージボックスを出したいです

そのやり方を教えてください。お願いします
ちなみにバージョンはExcel2010です

Excelで管理台帳を作っています

コマンドボタンをクリックすると、元データ「受給者情報」シートから今月利用終了となる人のリストを「利用終了者」シートに抽出できるようにしています
正しい作り方ではないのかもしれませんが、これでちゃんと抽出できているから抽出自体はこれでも問題ないと思います(^_^;)

それはいいのですが、対象となる人がいない場合、抽出先の「利用終了者」シートにはタイトル行しか出ません。

それでも構わないのですが、できたら抽出データがない場合(A2セルより下のデータがない...続きを読む

Aベストアンサー

End With 以降は、こうなるのでしょうか。
それと、Range("a1").Select は、エラーが出ないとヘンですよね。

'//...

 End With
 If Application.CountA(Worksheets("利用終了者").Range("A:A")) > 1 Then
  MsgBox "今月末で終了の利用者です!", vbOKOnly + vbInformation, "確認"
  If MsgBox("印刷しますか?", vbYesNo + vbQuestion, "印刷") = vbYes Then
   Worksheets("利用終了者").PrintOut
  End If
 Else
  MsgBox "今月で終了の利用者はいません", 64
 End If
 Application.Goto Sheets("top_page").Range("A1")
End Sub


人気Q&Aランキング

おすすめ情報