éžæè¡ã®ããŒã¿ãTSVããã¹ãã«å€æããExcelã¢ãã€ã³
è±Excelãã§ããªãçç±ã®äžã€ãšããŠãæ ã·ã¹ãããã±ãŒãžã§å°å ¥ããã·ã¹ãã ã®åéäžè¶³ãæããããŸããåè ã®å Žåã¯éçºè èªèº«ã®åéäžè¶³ãšè²¬ä»»åé¿ã®çºãåŸè ã®å Žåã¯äž»ã«äºç®ã®éœåã§ã«ãããããããã®çºãå®éã®çŸå Žã®æ¥åãšã®å·®ãåããŠãããã®ã¯ãä»ã§ããªãExcelã§ãããæã«ã¯åºå¹¹æ¥åã·ã¹ãã ã®1éšãæ ãããšãçãããããŸããã
ãããªã±ãŒã¹ã«æŒããŠãExcelã®ããŒã¿ãåºå¹¹æ¥åã·ã¹ãã ã§ã€ã³ããŒãã§ãã圢åŒã«å€æããŠãšãã£ãäœæ¥ããããŸãã1å2åçšåºŠãªãVBAãªã©æžããªããŠãè¯ãã§ãããå©çšè ã倿°ã§å©çšé »åºŠãé«ããšãªããšããã°ã©ã ãäœãå¿ èŠããããŸããä»åãSAP HANAäžã«ããŒã«ã«ããŒã¿ãåã蟌ãçºã®ãã®ãäœãäºã«ãªããŸããã(APIå©ããŠæµãããã°ãããããã£ãŠæã£ãããã®ããªããããéèç³»ã®ã³ã³ãµã«äŒç€Ÿã®æ åœã«ãèšã£ãŠãããŠäžããïŒ
ä»åã¯SAPåãã«TSV圢åŒã§Excelã®ããŒã¿ã倿ããŠåºåããã¢ãã€ã³ãäœã£ãŠã¿ãŸããã
ç®æ¬¡
ä»åå©çšãããã¡ã€ã«ç
ã¢ãã€ã³åœ¢åŒã§ããxlamã§äœæããŠããã®ã§ãå°å ¥ãå¿ èŠã«ãªããŸãããŸããåºåãããtextãã¡ã€ã«ã¯TSV圢åŒã§ãæåã³ãŒãã¯Shift-JIS圢åŒãšããŠããŸãïŒVBAå ã®ãªãã·ã§ã³ã倿Žããã°ãUTF-8ã§ã®åºåãç¢ºèªæžã¿ã§ãïŒã
äºåæºå
ä»åã®ãã¡ã€ã«ã¯ã¢ãã€ã³åœ¢åŒã§ãããããå©çšããçºã«ã¯ããã€ãã®æºåãå¿ èŠã«ãªããŸããã¢ãã€ã³ã§ãã®ã§ãåäœã§ã¯åäœããŸãããæé ã«åŸã£ãŠå°å ¥ããäºã§ãå šãŠã®Excelãã¡ã€ã«ã§å©çšããäºãã§ããããã«ãªããŸãã
éçºã¿ãã衚瀺ãã
- âã¡ãã¥ãŒããããã¡ã€ã«ãâããªãã·ã§ã³ããéããŸãã
- å·ŠåŽãµã€ãããŒããããªãã³ã®ãŠãŒã¶èšå®ããã¯ãªãã¯ããŸãã
- å³åŽã®ãªãã³ã®ãŠãŒã¶èšå®å ã«ãéçºããããããã§ãã¯ãå€ããŠãããšæãã®ã§ããã§ãã¯ãå ¥ããŠãããŸãã
- OKãã¿ã³ãæŒããŠå®äº
å³ïŒéçºã¿ãã衚瀺ããªããšå°å ¥ã§ããªã
ã¢ãã€ã³ãå°å ¥ãã
- ã¢ãã€ã³ã¯èªåã®ãã€ããã¥ã¡ã³ãã®ãããã¥ã¡ã³ããã©ã«ããã«ã§ãå ¥ããŠãããŸãããïŒãã¹ã¯ãããã ãšå€±ããå¯èœæ§ãããããïŒ
- Excelã®ãéçºã¿ãããéããŸãã
- ãExcelã¢ãã€ã³ããã¯ãªãã¯ããŸãã
- ã¢ãã€ã³ãã€ã¢ãã°ãåºããããåç §ããã¯ãªãã¯ããŸãã
- ãã¡ã€ã«ã®åç §ãã€ã¢ãã°ãåºãŠããŸããå³äžã®ãã¢ãã€ã³(*.xlam, *.xla, *.xll)ãã®éšåã¯ãããã¹ãŠã®ãã¡ã€ã«(*.*)ãã«å€æŽããŸãã
- 1.ã§ä¿åããtabusaku.xlamãèŠã€ããŠOKãã¿ã³ãæŒããŸãã
- ããã§è¿œå å®äºãOKãã¿ã³ãæŒããŠçµäºã§ã
- ãªãã³ã®æã«ãã¿ãäœåããšããã¿ããåºãŠããããã«ãªãããTSVãžå€æåºåãã®ãã¿ã³ã远å ãããŠããã¯ãã§ãã
å³ïŒã¢ãã€ã³è¿œå ãã€ã¢ãã°
åç §èšå®ã®è¿œå
ã¢ãã€ã³ãšããŠäœãå Žåã以äžã®ã¢ãžã¥ãŒã«ãåç §èšå®ã«è¿œå ããŠããå¿ èŠããããŸããã¢ãã€ã³ã䜿ãã ãã®äººã¯ç¹ã«äœãäœæ¥ã¯å¿ èŠãããŸããããã®èšå®ã¯ãã®ã¢ãã€ã³ãäœæããããã°ã©ãã®äœæ¥ã«ãªããŸãã
- Microsoft ActiveX Data Object 6.1 Library - ããã¹ãããŒã¿ã®æžãåºãæã«å©çšãã
- Microsoft Office 16.0 Object Library - ãªãã³ã§å©çšãã
- Microsoft Scripting Runtime - 飿³é åã®Dictionaryããã¡ã€ã«ã®æç¡ãç¹æ®ãã©ã«ãã®ååŸãªã©ã§å©çšãã
å³ïŒåç §èšå®ãå¿ èŠã«ãªããŸã
äœ¿ãæ¹
ãã®ã¢ãã€ã³ã¯ä»¥äžã®ãããªæ©èœãæã£ãŠããŸãã
- âæ·»ä»ããŠããèŠæ¬ã®Excelãã¡ã€ã«ã®ãããªåœ¢åŒã®æã«ãéžãã è¡ïŒCtrlããŒã§é£ã°ããŠè¡éžæã察å¿ïŒã ããTABåºåãããã¹ããšããŠåºåããŸãã
- âåºåå ã¯ããã©ã«ãã§ã¯ã·ãŒãåïŒãã¹ã¯ããããæå®ïŒããã¡ã€ã«åã«ãªããŸããã倿Žããäºãå¯èœã§ãã
- ã¿ã€ãã«è¡ïŒé ç®åã®ããè¡ïŒãå«ããå Žåã«ã¯ããã®è¡ãåºåãããŸããããããŒããã®å Žåã«ã¯ã¿ã€ãã«è¡ãéžæè¡ã«å«ããŠãã ããã
- åºåããããŒã¿ã¯ãShift-JIS圢åŒã®TABåºåãããã¹ãâã§ãïŒCSVã§ã¯ãããŸããïŒ
- ââ埩æ°è¡ãéžãã ãããã¿ãäœåããšããã¿ãå ã«ãããTSVãžå€æåºåããã¯ãªãã¯ãä¿åå ãèããŠããã®ã§ãéžãã§OKã§åºåå®äºã§ãã
- æ®éã®ããã¹ããã¡ã€ã«ãªã®ã§ã¡ã¢åž³ãªã©ã§äžèº«ã確èªããäºãå¯èœã§ãã
å³ïŒè¡éžæããŠãã®ãã¿ã³ãæŒã
ãœãŒã¹ã³ãŒã
ãªãã³ã®XMLã³ãŒã
1 2 3 4 5 6 7 8 9 10 11 12 |
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" xmlns:mso="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnLoad"> <ribbon> <tabs> <tab id="SampleTab" label="ã¿ãäœå" getVisible="Tab_getVisible"> <group id="toolgroup" label="倿ããŒã«" centerVertically="true"> <button id="customButton" label="TSVãž
倿åºå" image="niku" size="large" onAction="changeman" /> </group> </tab> </tabs> </ribbon> </customUI> |
- nikuãšããã€ã¡ãŒãžãã¡ã€ã«ãåã蟌ãã§ãããŸãã
- ãã¿ã³ã¯ãªãã¯æã«ã¯ãchangemanãšããã³ãŒããå®è¡ãããä»çµã¿ã§ãã
- ãã¡ã€ã«èªã¿èŸŒã¿æã«ã¯ãOnLoadãšããã³ãŒããå®è¡ããããªãã³ã®åæåãå®è¡ãããŸãã
- ä»åã®ã³ãŒãã¯ãCustom Ribbon UI Editorã䜿ã£ãŠäœæããŠããŸãã
ãªãã³åæåã®ã³ãŒã
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Public m_ribbon As IRibbonUI 'ãªãã³èµ·åæã«åæåããã³ãŒã Public Sub OnLoad(ribbon As IRibbonUI) 'ãªãã³ã®ã€ã³ã¹ã¿ã³ã¹ãååŸ Set m_ribbon = ribbon 'èªäœã®ãªãã³ãã¢ã¯ãã£ãã«ãã m_ribbon.ActivateTab ("SampleTab") End Sub 'ã¿ãã®è¡šç€ºç¶æ
ãååŸãã Public Sub Tab_getVisible(control As IRibbonControl, ByRef returnedVal) 'åžžã«ã¿ãã衚瀺ãã returnedVal = True End Sub 'ãªãã³çšçŽæ¥å®è¡é¢æ° Public Sub changeman(control As IRibbonControl) Call tsvconverter End Sub |
- ãªãã³ãåæåããOnLoadã®ã³ãã³ãåã³å€æå®è¡ã®changemanã®ã³ãŒãã§ã
ã¡ã€ã³ã®VBAã³ãŒã
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
'çŸåšã¢ã¯ãã£ãã§éžæãããŠããè¡ã ããUTF8ã®TSVãã¡ã€ã«ãšããŠåºåããã³ãŒã Public Function tsvconverter() 'çŸåšã¢ã¯ãã£ãã«ãªã£ãŠãã·ãŒãåãååŸãã Dim activesheetman As String activesheetman = ActiveSheet.Name '// ã·ãŒãã®å
¥åç¯å²ã®å
šã»ã«ãååŸ Dim rUsed As Range Set rUsed = ActiveSheet.UsedRange 'è¡éžæãããŠãããã©ãããã§ã㯠Dim lineman As Boolean lineman = line_check() If lineman = False Then 'è¡éžæãããŠããªãã®ã§çµäº MsgBox "è¡éžæãããŠããŸããã" Exit Function End If 'ãŠãŒã¶ã®ãã¹ã¯ããããã¹ãååŸãã Dim Path As String, WSH As Variant Set WSH = CreateObject("WScript.Shell") Path = WSH.SpecialFolders("Desktop") Set WSH = Nothing 'ãã¡ã€ã«ã®åºåå
ãæå® Dim savepath As Variant savepath = Application.GetSaveAsFilename(InitialFileName:=Path & "" & activesheetman & ".txt", FileFilter:="TABåºåãããã¹ã,*.txt") 'ãã©ã«ãéžæããã£ã³ã»ã«ãããå Žå If savepath = False Then MsgBox "ä¿åå Žæã®æå®ããã£ã³ã»ã«ãããŸããã" Exit Function End If 'ããã¹ãåºåçšã®å€æ° Dim ts As TextStream Dim fs As New FileSystemObject Dim s Dim iRow iRow = 0 'çŸåšéžæãããŠããè¡ãååŸãã Dim rng As Range Dim r As Range Dim cnt As Integer cnt = 1 'éžæè¡ã«ãŠã³ãçšã®é
åãçšæ Dim Member As Dictionary Set Member = New Dictionary 'éžæè¡ã®è¡çªå·é£æ³é
åã«è¿œå ãã Dim test As Variant For Each rng In Selection.Rows 'è¡çªå·ãå
¥ãã test = rng.Row Member.Add cnt, test 'ã«ãŠã³ã¿ã远å ãã cnt = cnt + 1 Next rng '1ã»ã«ãã€ã«ãŒã Dim firstflg As Boolean firstflg = True Dim varResult As Variant Dim execflg As Boolean execflg = False '飿³é
ååŠççšå€æ° Dim dicman As Integer Dim tempdic As Variant dicman = Member.Count For Each r In rUsed 'çŸåšã®è¡çªå·ãé
åã«ãããã©ãããã§ã㯠For i = 0 To dicman 'èŠçŽ ãåãåºã tempdic = Member.Item(i) 'è¡çªå·ãšdictionaryã®å€ãäžèŽããŠãããã©ã°ãç«ãŠã If tempdic = r.Row Then execflg = True Exit For End If Next i 'æ»ãå€é
åã®ãµã€ãºã§èŠçŽ ã®æç¡ãå€å® If execflg = True Then 'æå®è¡ãªã®ã§ããŒã¿ã®åŠçãè¡ãªã If iRow <> r.Row Then '// ã«ãŒãååæã§ã¯ãªãå Žå If firstflg = False Or r.Column <> rUsed.Column Then '// è¡ãå€ãã£ãããæ¹è¡ã³ãŒããä»äž s = s & vbCrLf Else firstflg = False End If '// è¡ã®å
é å€ãé£çµ s = s & r.Text Else '// ã¿ãæååºåãã§é£çµ s = s & vbTab & r.Text End If Else 'é
åã«ããªãè¡ãªã®ã§ã¹ã«ãŒãã End If 'çŸåšè¡çªå·ãååŸ iRow = r.Row 'ãã©ã°ãåæå execflg = False Next 'ADODB.streamã«ããUTF-8圢åŒã§ã®åºå Dim output As ADODB.Stream Set output = New ADODB.Stream 'ã»ã«ã®æååãååšããå ŽåTXTãæžã蟌ã¿ãã If s <> "" Then 'Shift-JISã§åºåãã(UTF-8ãæå®ãããšUnicodeã«ãªãïŒ With output 'Shift-JISã§èšå®ããŠéã .Type = adTypeText .Charset = "Shift-JIS" .LineSeparator = adLF .Open End With 'ãã¡ã€ã«ã®æžãåºã With output 'åºåå
å®¹ãæžãåºã .WriteText s, adWriteLine 'ãã¡ã€ã«ãä¿åãã .SaveToFile savepath, adSaveCreateOverWrite 'éãã .Close End With End If 'çµäºåŠç 'Call ts.Close MsgBox "ããŒã¿ãããã¹ã圢åŒã«å€æããŸãããïŒ" End Function 'è¡éžæãããŠãããã©ãããã§ã㯠Public Function line_check() As Boolean '倿°ã®å®£èš Dim lineadd As String lineadd = Selection.Address(False, False) lineadd = Replace(lineadd, ":", "") 'éžæè¡ãã©ãããç¢ºèª If IsNumeric(lineadd) Then line_check = True Else line_check = False End If End Function |
é¢é£ãªã³ã¯
- ç¹æ®ãã©ã«ããååŸãã
- 第75å.ååãä»ããŠä¿åãã€ã¢ãã°ïŒGetSaveAsFilenameïŒ
- VBAã§éžæãããŠããåæ°ã»è¡æ°ãååŸãã
- ãVBAå ¥éãDictionaryãªããžã§ã¯ã(飿³é å)ã®äœ¿ãæ¹
- VBA CSV,ã¿ã(Tab)åºåããã¡ã€ã«ãäœæããæ¹æ³ - Excel VBA
- ADODB.Streamã䜿ã£ãããã¹ããã¡ã€ã«ã®èªã¿æžã
- ããã¹ããã¡ã€ã«ïŒUTF-8ïŒãèªã¿èŸŒã¿ãæžãåºãïŒADODB.StreamïŒ
- VBA ã¿ãæåãåºåããæ¹æ³ã