jcctaira の回答履歴
- エクセルVBAの文字列操作について2
エクセルVBAの文字列操作について2 以前、こちらでご教授いただいた以下のような文字列操作方法があります。 この方法ですと例えば[1-3]から3をひいた際に"1-2"と表示されますが 今回は連続する数字が2つの場合は1,2と表示させ3つ以上の場合は-でつないで表示させたいと思います。 一週間ほど考えたのですが解決できませんでした。 どなたかご協力お願いいたします。 質問内容 例えば、[1-10,15-20,22-38]と入っているセルがあるとします。 このセルに数を足したり引いたりしたいのです。 例えば、このセルから”5”を引いて[1-4,6-10,15-20,22-38]と表示したり、 "21"を足して[1-10,15-38]と表示したい。 いただいたご回答 A1 セル に「1-10,12,15-20,22-38」と入力されているとして、別のセルに =NUMORDER(A1,-5) と入力すると「1-4,6-10,12,15-20,22-38」と表示し =NUMORDER(A1,21) と入力すると「1-10,12,15-38」と表示します。 1つ目の引数には「セル番地」または「文字列」を、2つ目の引数には「1 ~ 99 までの整数」をお入れください。 Function NUMORDER(myStr As Variant, num As Integer) As String Dim i As Long Dim j As Double Dim myNum As Variant '文字列中の スペース を削除 myStr = Replace(myStr, " ", "") '文字列の前後に「0」・「100」を挿入 Select Case Left(myStr, 2) Case "1,", "1-" myStr = myStr & ",100" Case Else myStr = "0," & myStr & ",100" End Select '文字列を カンマ で分割し、ハイフン の区間の数字を補完する myStr = Split(myStr, ",") For i = 0 To UBound(myStr) If InStr(myStr(i), "-") > 0 Then myNum = Split(myStr(i), "-") myStr(i) = "" For j = myNum(0) To myNum(1) myStr(i) = myStr(i) & " " & j Next myStr(i) = Trim(myStr(i)) End If Next '欠番に「●」を入れ、「数を足したり引いたり」する myStr = Split(Join(myStr)) For i = 0 To UBound(myStr) - 1 myStr(i) = myStr(i) & Application.WorksheetFunction.Rept(" ●", myStr(i + 1) - myStr(i) - 1) Next myStr = Split(Join(myStr)) If num > 0 Then myStr(num - myStr(0)) = num Else myStr(-num - myStr(0)) = "●" End If '前後に挿入した「0」・「100」を削除 myStr = Replace(Join(myStr), " 100", "") If Left(myStr, 2) = "0 " Then myStr = Right(myStr, Len(myStr) - 2) '連続数字を ハイフン で繋ぐ myStr = Split(myStr, "●") For i = 0 To UBound(myStr) If myStr(i) <> " " Then myNum = Split(Trim(myStr(i))) If UBound(myNum) > 0 Then myStr(i) = myNum(0) & "-" & myNum(UBound(myNum)) End If End If Next 'カンマ で文字列に分割する myStr = Application.Trim(Join(myStr)) NUMORDER = Replace(myStr, " ", ",") End Function
- 締切済み
- オフィス系ソフト
- noname#150547
- 回答数5
- 等しく「長いコーディング箇所」が何度も繰り返される場合のテクニック?!
等しく「長いコーディング箇所」が何度も繰り返される場合のテクニック?! 例えば、 If var = 1 Then Range(color_position).Interior.ColorIndex = const_color_1 Elseif var = 2 Then Range(color_position).Interior.ColorIndex = const_color_2 Elseif var = 3 Then Range(color_position).Interior.ColorIndex = const_color_3 : : Elseif var = 20 Then Range(color_position).Interior.ColorIndex = const_color_20 End IF なんて場合、 「Range(color_position).Interior.ColorIndex」の箇所が、何度も繰り返されるわけです。 そういう箇所が、至るところにある場合、ファイルサイズが大きくなり、 色々とデメリットがあるような気がしています。 (単純にファイルサイズが無駄に大きい、ファイルの保存に時間がかかる、などのデメリット。場合によっては、処理速度にも悪影響を及ぼす?!) そこで、 Dim set_color As Object Set set_color = Range(color_position).Interior.ColorIndex のようにすれば(Withを使っても良いですが)、前述のコード例は、 If var = 1 Then set_color = const_color_1 Elseif var = 2 Then set_color = const_color_2 Elseif var = 3 Then set_color = const_color_3 : : Elseif var = 20 Then set_color = const_color_20 End IF こんなにスッキリ♪ となりますが、こういう考え方で作業をするのは、 実際、価値があると言えますでしょうか? むしろ、デメリットであったりするのでしょうか? アドバイスを宜しくお願い致します。
- ベストアンサー
- Visual Basic
- nbsp0606
- 回答数4
- EXCELマクロ AutoFilterの使い方を教えて下さい。
EXCELマクロ AutoFilterの使い方を教えて下さい。 EXCELマクロ初心者です。使用環境は、EXCEL2007です。 Web上で紹介されていたマクロをアレンジして以下のようなマクロを作成しました。 B列に指定した数字が記載された行を削除するものです。 これをさらに、4,5,6,・・・,11,12,1,2,3の中から指定した数字以外がB列に記載 された行を削除するように書き換えたいのですが、「Criteria1:=intCriteria」 を「Criteria1:<>intCriteria」として実行してみましたがエラーが出てしまいま す。 どなたか、良い方法をご教示ください。不足の情報、私の説明不足がありましたら、 ご指示ください。 以下、MACRO内容 Sub B列に指定の数字がある場合、行を削除() Application.ScreenUpdating = False intCriteria = InputBox("検索する数字を入力。", "数字入力") With Cells(2, 1).CurrentRegion On Error GoTo errhandler .AutoFilter Field:=2, Criteria1:=intCriteria .Offset(1).Resize(.Rows.Count - 1). _ SpecialCells(xlCellTypeVisible).EntireRow.Delete End With ActiveSheet.AutoFilterMode = False Exit Sub errhandler: ActiveSheet.AutoFilterMode = False MsgBox intCriteria & "はありません。" Application.ScreenUpdating = True End Sub
- エクセルのマクロについて困っています。2
エクセルのマクロについて困っています。2 見てくださり有難うございます。 前回と似た内容の質問ですが、すみません。 前回の内容です。→ http://okwave.jp/qa/q5906335.html 私がマクロで行いたい作業が「場所と日付を検索、さらに要らない列を消し、別シートに表示したい」というものです。 以下の表を作ってみました。 検索したい→A列・B列 削除したい→C列・F列 A B C D E F 1 場 所 日 付 使用機械 作業内容 工数(H) 備 考 2 東京 2010/05/19 R形 掃除 1.00 なし 3 新潟 2010/05/17 L形 塗布 6.00 なし 4 東京 2010/06/01 L 掃除 2.50 なし 5 東京 2010/06/01 L形 掃除 1.00 なし 6 神戸 2010/05/18 R形 塗布 7.00 なし 7 新潟 2010/06/01 L形 塗布 7.50 なし 8 東京 2010/05/11 F形 掃除 2.00 なし 9 神戸 2010/06/01 L形 掃除 1.00 なし 10 神戸 2010/05/15 L形 塗布 5.00 なし ↓ (例)東京の5月分の検索をした場合の結果 A B C D 1 場 所 日付 作業内容 工数(H) 2 東京 2010/05/11 掃除 2.00 3 東京 2010/05/19 掃除 1.00 こうなるようにプログラムをくみたいです。前回の応用も含め、自分なりに組んでみましたがうまくいきません。どこがだめでしょうか?(回答欄にコードを入れますので見てもらえるとうれしいです。 また、こっちのやり方の方がいいんじゃない?というのがありましたら教えていただけますよう宜しくお願い致します。
- ベストアンサー
- その他MS Office製品
- loveless-05410
- 回答数7
- エクセルで曜日関係分かる人お願いします
エクセルで曜日関係分かる人お願いします 出勤簿を作っているのですが、曜日入力が面倒で関数で入らないかなと考えています、 E1に年度、 N1に月、 I2から横に日(1~31)が入っています、I3に曜日を入れます、 年度と月の数字を変えることにより、自動で曜日を出したいのです E1+N1+I2をI3に入れ曜日を出したいと思うのですが、 どんな関数と書式で良いのでしょうか 使用エクセルは2000 2007です
- ベストアンサー
- その他MS Office製品
- daiku164
- 回答数10
- マクロで特定の行まで削除する方法を探しています。
マクロで特定の行まで削除する方法を探しています。 具体的にはA列の10~20行の間に [ 進む ] と入力されているセルがあるので、その文字を含む行まで削除する方法を探しています。 A11に進むとあればA1~A11までを削除、A14に進むと入力されていればA1~A14までという感じです。 よろしくお願いします。
- エクセルで 「月」と入れてオートフィルで火・水・木・・と連続データにで
エクセルで 「月」と入れてオートフィルで火・水・木・・と連続データにできますが、(月)のようにかっこ内で表示したものをオートフィルで(火)(水)(木)・・・のようにする方法はありますか。
- ベストアンサー
- オフィス系ソフト
- noname#144354
- 回答数4
- エクセル2003でセル内の文字のうち、半角カナ文字だけを全角かなに変換
エクセル2003でセル内の文字のうち、半角カナ文字だけを全角かなに変換する方法 数字や英文字は半角のまま残して、読みにくい半角カナだけを全角かなに変える方法はあるでしょうか? JIS()ですと、すべての文字が全角に変わってしまいます。 詳しい方、どうかよろしくお願い致します。
- ベストアンサー
- その他MS Office製品
- roco43889
- 回答数8
- エクセル2003です。シートA列の最初の罫線を判断してそこまでの行を削
エクセル2003です。シートA列の最初の罫線を判断してそこまでの行を削除したいと思っています。 罫線の判定方法がまず引っかかっているのですが、判定と削除を含めてすっきりしたマクロの記述はないでしょうか。お願いします。使用ソフトはエクセル2003です。
- エクセルで一つのセルに数式を二つ以上入力する方法はありますか?
エクセルで一つのセルに数式を二つ以上入力する方法はありますか? 昨晩から プルダウンメニューで ある文字列を選び、その文字列により、違った計算をさせて、その答えをセルに表示させようとしていますが、全く上手くいきません・・・。 Sheet1の任意のセルに ABC, DEF, GHI, JKL と言う文字列を作り、プルダウンメニューで選べる様にしました。 そして、選んだ文字列により、下記の通り 切捨ての簡単な計算をさせて、その答えを Sheet2 の任意のセルに表示させたいと思ってます。 Sheet2の任意のセルにこの様な数式を教えて頂きまして入力しましたが、上手く行きませんでした。 =IF(F3="ABC", ROUNDDOWN(H3,2)*0.976),"DEF",ROUNDDOWN(H3,2)*0.976),"GHI", ROUNDDOWN(H3,2)*0.975), "JKL", ROUNDDOWN(H3,2)*0.978) 何かと試行錯誤してますが、全く分りません・・・(>_<)。 どなたか助けて下さい(/_;)
- ベストアンサー
- その他MS Office製品
- noname#175027
- 回答数6
- エクセルで一つのセルに数式を二つ以上入力する方法はありますか?
エクセルで一つのセルに数式を二つ以上入力する方法はありますか? 昨晩から プルダウンメニューで ある文字列を選び、その文字列により、違った計算をさせて、その答えをセルに表示させようとしていますが、全く上手くいきません・・・。 Sheet1の任意のセルに ABC, DEF, GHI, JKL と言う文字列を作り、プルダウンメニューで選べる様にしました。 そして、選んだ文字列により、下記の通り 切捨ての簡単な計算をさせて、その答えを Sheet2 の任意のセルに表示させたいと思ってます。 Sheet2の任意のセルにこの様な数式を教えて頂きまして入力しましたが、上手く行きませんでした。 =IF(F3="ABC", ROUNDDOWN(H3,2)*0.976),"DEF",ROUNDDOWN(H3,2)*0.976),"GHI", ROUNDDOWN(H3,2)*0.975), "JKL", ROUNDDOWN(H3,2)*0.978) 何かと試行錯誤してますが、全く分りません・・・(>_<)。 どなたか助けて下さい(/_;)
- ベストアンサー
- その他MS Office製品
- noname#175027
- 回答数6
- エクセルのデータのコピー(シート間)
エクセルのデータのコピー(シート間) シート1の10行目には,A列からCZ列の各列ごとに1行目から9行目までの数値の加算式が入力されています(A10には「=SUM(A1:A9)」,B10には「=SUM(B1:B9)」,・・・CZ10には「=SUM(CZ1:CZ9)」)。 これらの加算式のデータ(A10,B10,・・・CZ10)を,シート2のA列の1行目から78行目まで縦にコピーしたいのですが,良い方法を教えて下さい。 宜しくお願いします。
- ベストアンサー
- その他MS Office製品
- morixxm
- 回答数2
- Excel関数 選択条件によって表示内容を変えたい
Excel関数 選択条件によって表示内容を変えたい 添付の画像のように、緑色のセルと黄色のセル、 それぞれの中から選択・入力をすると条件に合った文字が出るようにしたいです。 赤文字の部分に関数を入れて、入力された内容によって表示が変わるようにしたいです。 わかりづらくて申し訳ございませんが、よろしくお願いいたします。
- エクセル・マクロ・・・シート名の取得等
エクセル・マクロ・・・シート名の取得等 エクセルのマクロで質問です。 ほぼ初心者です。 社内データの処理をしたいと考えています。 マクロを組みたいエクセルブックの構成としては・・・ シート名一覧 集計シート 操作 という3つのシートがあり、 その後ろに各社員のデータシートがあります。 山田太郎 田中花子 ・ ・ ・ 部署により社員数が異なるためシートの4枚目以降は そのエクセルファイルによりシート数が異なります。 やりたいことは以下の2点です。 (1)シート名(社員名)の取得 シート名一覧に各シート名を一行ずつ入れて 一覧を作りたいです。 シート名取得&リスト化のマクロは大体わかりますが、 「シート名一覧」、「集計シート」、「操作」の3つのシート名は 一覧から外したく、どうしたらいいのかわかりません。 また、各シート名を取得した列の横の列に 各社員のシートにあるデータの一部(セルC5:C8)を 貼り付けたいです。 (2)集計シートに各社員のシートのD列の情報(D6:D43)を順に貼り付けていく。 シート名や数が固定されたものであれば何とかできそうなのですが、 不特定になるとどうしたらよいかさっぱりわかりません。 どなたかご教授お願いいたします。
- シートを別のブックに移動させたいのですが、
シートを別のブックに移動させたいのですが、 マクロで作成するとこうなりました。 Workbooks.Open Filename:= _ "C:\Documents and Settings\YUUKORON\My Documents\YYYY.xls" Windows("GGGG.xls").Activate Sheets("2010.4YY").Select Sheets("2010.4YY").Move Before:=Workbooks("YYYY.xls").Sheets(1) が、移動先のブック名が移動させたいシートのセルF1に入力されているので、ブック名YYYYをどのようにすればよいのか教えてください。 Workbooks.Open Filename:= _ "C:\Documents and Settings\YUMIKO\My Documents\" & Range("F1").Value & ".xls" Windows("GGGG.xls").Activate Sheets("2010.4YY").Select Sheets("2010.4YY").Move Before:=Workbooks("YYYY.xls").Sheets(1) 試してみた方法 Sheets("2010.4YY").Move Before:=Workbooks("("2010.4YY").Range("F1").Value.xls").Sheets(1) Sheets("2010.4YY").Move Before:=Workbooks _ ("C:\Documents and Settings\YUMIKO\My Documents\" & Range("F1").Value & ".xls").Sheets(1) どれもダメでした。 あと、今は、Sheet(1)の前となっていますが、常にブックの先頭に移動させることはできるのでしょうか? シート名は、2010.5YY、2010.6YY というふうに毎月増えていく予定です。 初心者です。よろしくお願いします。
- エクセル関数について教えてください。
エクセル関数について教えてください。 セルA5からA99の範囲で、セルA5から三行したのA9、また、三行下のA12、また、三行下のA15、、、、の中での最大値を、別の場所のセルB1に表示したいのですが可能でしょうか? 要は、何段かごと(決まった何段かごと)のセルの最大値を、別の場所のセルに表示したいのですが、、、
- ベストアンサー
- その他MS Office製品
- hikarika1
- 回答数6
- マイクロソフトのワードに関して、質問します。
マイクロソフトのワードに関して、質問します。 ワードで「脚注」という機能があるのですが、どういう時に使うものなのでしょうか? すみません、パソコンに関しては素人なので、わかりやすい解説をお願いします。
- 締切済み
- オフィス系ソフト
- nadeshiko-007
- 回答数2
- エクセルの関数?について教えてください。
エクセルの関数?について教えてください。 セルA3、セルA4、、、、、と続く行で、A3+A5+A7、、の中での最大値をセルB1に表示、B4+B6+B8、、、の中での最大値をC1に表示したいのですが、、、? すいません、ご教示ください。
- 【VBA】ユーザ定義関数が動かない
【VBA】ユーザ定義関数が動かない 下記のようなプログラムをVBEの標準モジュールに記述して、 ワークシートの適当なセルに「=tc("aa","bb")」と入力してEnterを押した所 セルの表示が「=tc("aa","bb")」となってしまい狙った効果が得られません。 本当は、「aabb」と表示させたいのですが、なぜうまくいかないのでしょうか。 ご教授願います。 ◆関数の仕様 引数1と引数2に入力された文字列を連結して返り値として返す。 ◆コード Function tc(str1 As Range, str2 As Range) As String Dim Str As String Str = str1.Value & str2.Valuett tt = Str End Function
- ベストアンサー
- オフィス系ソフト
- bebestplay
- 回答数3
- エクセル 複数シートを一つのシートにまとめるマクロについて
エクセル 複数シートを一つのシートにまとめるマクロについて こんにちは いつもお世話になっています あるサイトから上記の目的のマクロを参考にして試したんですが、所有してるデスクトップPCでは成功するのに、ノートPCでは次のエラーが出ます。 「コンパイルエラー 変数が定義されていません」そして、以下に載せたコードの「k = 1」の部分が青い背景色になります。とりあえず、デスクトップでできるので間に合うのですが、ノートPCでのトラブル理由を今後のために勉強したいのです。理由を教えてください。 エクセル2003 SP3 ノートPCは工人舎のモバイルSA1F0 参考にさせていただいたサイトは「エクセル 複数シートを一つに集約」 http://okwave.jp/qa/q1608016.html?order=DESC&by=datetime コード引用 集約用にSheet3を確保します・ Sheet3以外の全シートを集約します。 Sub test07() Dim sh3 As Worksheet Dim sh As Worksheet Set sh3 = Worksheets("Sheet3") k = 1 For Each sh In ActiveWorkbook.Worksheets If sh.Name <> "Sheet3" Then MsgBox sh.Name sh.UsedRange.Copy sh3.Cells(k, "A").Select sh3.Paste k = k + sh.UsedRange.Rows.Count End If Next End Sub 引用終わり よろしくお願いします
- ベストアンサー
- その他MS Office製品
- 5goma
- 回答数2