忙しい現代人の腰&肩のお悩み対策!

またまた、お願いします。

エクセル初心者向けの入力支援としてマクロを使っています。

【やりたい事】
セルを選択しマクロを実行すると「該当セルの末尾1文字が削除される」というのは可能でしょうか?
カーソルを入れてBSすれば済むだけの事ですが、諸般の事情で「セル選択+マクロ実行」の動作にしたいのです。

どなたかよろしくお願いします(ponta_024)

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

A 回答 (2件)

こんな感じでしょうか。



Sub DeleteEndLetter()
  Dim r As Range
  For Each r In Application.Selection
    If Len(r.Value) > 0 Then
      r.Value = Left(r.Value, Len(r.Value) - 1)
    End If
  Next
End Sub
    • good
    • 1
この回答へのお礼

ham_kamo様 ありがとうございました。

いろいろな記述の方法があるようですね。モジュールに
コピーしていじくり回してみましたが、ham_kamoさんの
方法だと空白で実行してもエラーがでませんでした。
そこが相違点なのですか?

早速明日から会社で実験してみます。
ebinamori様 ham_kamo様 ありがとうございます(ponta)

お礼日時:2006/11/23 17:23

Sub Macro1()


Dim str As String
Dim num As Integer
str = ActiveCell.Text
num = Len(str)
ActiveCell = Left(str, num - 1)
End Sub
    • good
    • 2
この回答へのお礼

解決しました!
ebinamori様 早速のご回答ありがとうございます。
何時間悩んでも、知識がないので意味ないですね(笑)
みなさんに聞けば簡単に解決してしまうのですね・・・。

これからもよろしくお願いします(ponta)

お礼日時:2006/11/23 17:17

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

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

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

Q文字列の後ろから必要分だけ削除したい。

例1 Dim str As String = "あいうえお1234"

文字列の中の1234だけ削除したい場合は、
str = str.Remove(5,4)
という風に、5文字目の後から4文字削除にすればよいのですが、

例の"あいうえお"の部分の長さが毎回処理する度に異なる場合は、
文字列の頭から何文字目という指定ができないので、”後ろから4文字を削除したい”となります。その場合は、どのようなプロパティを使えばいいのでしょうか。

.NET環境です。

Aベストアンサー

Length(str)で文字数を取得できますので、後ろから4文字目は先頭から何文字目かは計算できると思いますが、どうでしょうか?

Qエクセル、VBAで文字列から1文字消去

VBAに詳しい方、教えてください。
エクセルでアクティブセルの場所を変更せずに、右クリックするたびにアクティブセルの文字列を一文字ずつ右から消去したいです。

例)今アクティブセルはC10にあり、文字列”あいうえおかき”が入っている。任意の場所で右クリックするたびに”あいうえおか”、”あいうえお”・・・と文字が減っていく。 
 左クリックとかで、アクティブセルの場所を変えることがあるが、右クリックでは場所は変わらない。

いい方法を教えてください。

Aベストアンサー

シートのイベントに記入

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target.Value <> "" Then
Target.Value = Left(Target.Value, Len(Target.Value) - 1)
End If
End Sub

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

Qエクセルのセル文字列末尾だけを削除する方法ありますか?

こんにちは。
エクセルで各セルに
------------------------
山田さん
鈴木
田中さん
木村さんと川村さん
------------------------
のような最後に”さん”がついている場合とついていない場合があります。

”さん”を置換して空白にすれば削除できるのですが、

木村さんと川村さん

のセルの”木村さん”の”さん”は削除せず、セルの文字列末尾の”川村さん”の”さん”は削除したいのです。

希望としては、
------------------------
山田
鈴木
田中
木村さんと川村
------------------------
の様な形にしたいのですが、何か良い方法ありましたらアドバイス頂けませんでしょうか?
よろしくお願いいたします。

Aベストアンサー

A1セルから順にデータがあるとして、
=IF(RIGHT(A1,2)="さん",LEFT(A1,LEN(A1)-2),A1)
で出来ると思います。

Qエクセル VBA セルの個数を所得する

いつも皆様には大変お世話になっております。

早速の質問ですが、

    A    B     C     D     E
1
2       123
3       123
4       123
5       123
6
7       123
とエクセルのセルがなっている場合の
上のB2から下のB7までのセルの個数を所得したいのです
B8以降にも数字が入る場合があるのと間に空白が入る場合があるので
困っています。
B2のセルは固定となっているのでB2からの判別で問題ない状況です。
どうぞ皆様お知恵をお借りしたく思っておりますのでよろしくお願いいたします。

Aベストアンサー

質問が非常に不明確なのですが・・・

所得?取得ですよね?

単にB2:B7のセルの個数をVBAで取得するなら
MsgBox Range("B2:B7").Count

B2:B7の空白でないセルの個数なら
MsgBox Application.CountA(Range("B2:B7"))

B7まででなくB2からB列のデータがある最後までのセル個数なら
MsgBox Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row).Count

B2からB列のデータがある最後までの空白でないセル個数なら
MsgBox Application.CountA(Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row))

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

QExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。

以下のようなプログラムをVBAで作成したいと考えています。

A1のセルに値があれば、その値をB1に返す。
次にA2のセルに値があれば、その値をB2に返す。
A行に値がある一番下のセルまで同じようなことをさせたいと考えています。

VBAは初心者です。
どなかた宜しくお願い致します。

Aベストアンサー

#2さんと似たものですが・・・・参考にしてください。

Sub test001()
Dim i As Long
i = 1
Do While Cells(i, 1) <> ""
Cells(i, 2) = Cells(i, 1)
i = i + 1
Loop
End Sub

QEXCEL(VBA) 末尾の改行のみ削除したい

[ALT]-[ENTER]を使い、セル内を改行した文章があります。
その文章の末尾にある改行のみ削除したいのですが
ReplaceやRtrimを使うと、末尾以外の改行も削除されたりして、
思うような結果が得られません。

イメージとしては以下のようにしたいと思っております。

↓このように表示されているものを
-----------------------
本日は晴天なり。

1.AAAAA
2.BBBBB

-----------------------

↓このようにしたい
(2.BBBBB 以降にある改行のみ削除したいです。)
-----------------------
本日は晴天なり。

1.AAAAA
2.BBBBB
-----------------------

判りづらい説明で申し訳ありません。
何か良い方法はないでしょうか?

Aベストアンサー

正規表現で置換すればできると思います。
A1の文字列の末尾にある改行を削除してA2に表示します。

参照設定でVBScript Regular Expressions ?.?にチェックを入れる
Sub test()
Dim re As New RegExp
re.Pattern = "\n+$"'末尾の1個以上の改行
Range("A2") = re.Replace(Range("A1"), "")
Set re = Nothing
End Sub

または、
Sub test()
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "\n+$"'末尾の1個以上の改行
Range("A2") = re.Replace(Range("A1"), "")
Set re = Nothing
End Sub


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング